<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>尘埃落定</title>
	<atom:link href="https://www.lovelucy.info/feed" rel="self" type="application/rss+xml" />
	<link>https://www.lovelucy.info</link>
	<description>每一个可以努力的日子，都是一份厚礼。</description>
	<lastBuildDate>Wed, 29 Mar 2017 06:56:17 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.7</generator>
	<item>
		<title>【公告】DNS 192.241.222.103 永久停止服务</title>
		<link>https://www.lovelucy.info/dns-192-241-222-103-down.html</link>
					<comments>https://www.lovelucy.info/dns-192-241-222-103-down.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Wed, 30 Mar 2016 08:51:37 +0000</pubDate>
				<category><![CDATA[瞎折腾]]></category>
		<category><![CDATA[Unblock Youku]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2297</guid>

					<description><![CDATA[由于 DNS 192.241.222.103 被广泛滥用，加上目前 DDoS 攻击十分猖獗，我们的服务器不堪重&#8230;]]></description>
										<content:encoded><![CDATA[<p>由于 DNS 192.241.222.103 被广泛滥用，加上目前 DDoS 攻击十分猖獗，我们的服务器不堪重负，现在已经决定将此 DNS 永久停止服务。</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2297"></span></p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/unblock-dns.png" rel="attachment wp-att-2298"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/unblock-dns.png" alt="unblock-dns" width="600" height="52" class="aligncenter size-medium wp-image-2298" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/unblock-dns.png 863w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/unblock-dns-300x26.png 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/unblock-dns-768x67.png 768w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/unblock-dns-150x13.png 150w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>这个服务器是三年前购买的，最开始是 <a href="https://github.com/karlcheong" target="_blank">@karlcheong</a> 一手维护，后来由我管理。现在在后台看到 192.241.222.103 已经没有什么流量了，最近就关闭了。IP 还会由 @zhuzhuor 付费持有一段时间，保证不会被人拿去影响用户的安全。</p>
<p>还需要技术支持的用户，可以关注由 @yanggis 管理维护的新 DNS。也可以在 Facebook 购买 <a href="https://www.facebook.com/anbowifi" target="_blank">Anbo 安博路由器</a>。</p>
<div style="overflow:auto">
<p><a href="https://www.facebook.com/anbowifi"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/61iQ40gO9VL._SL1500_-300x300.jpg" alt="anbowifi-introduction" width="300" height="300" class="alignright size-medium wp-image-2299" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/61iQ40gO9VL._SL1500_-300x300.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/61iQ40gO9VL._SL1500_-150x150.jpg 150w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/61iQ40gO9VL._SL1500_-768x768.jpg 768w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/61iQ40gO9VL._SL1500_-1024x1024.jpg 1024w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/61iQ40gO9VL._SL1500_-64x64.jpg 64w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/61iQ40gO9VL._SL1500_-144x144.jpg 144w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/61iQ40gO9VL._SL1500_.jpg 1500w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p><a href="https://www.facebook.com/anbowifi"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/71ZBRM2ohRL._SL1500_-300x214.jpg" alt="anbowifi-demo" width="300" height="214" class="alignleft size-medium wp-image-2300" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/71ZBRM2ohRL._SL1500_-300x214.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/71ZBRM2ohRL._SL1500_-768x548.jpg 768w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/71ZBRM2ohRL._SL1500_-1024x731.jpg 1024w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/71ZBRM2ohRL._SL1500_-150x107.jpg 150w, https://www.lovelucy.info/wordpress/wp-content/uploads/2016/03/71ZBRM2ohRL._SL1500_.jpg 1500w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
</div>
<p>谢谢所有用户的信任。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/dns-192-241-222-103-down.html/feed</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>优秀的习惯</title>
		<link>https://www.lovelucy.info/good-habits.html</link>
					<comments>https://www.lovelucy.info/good-habits.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Sun, 24 Jan 2016 13:30:02 +0000</pubDate>
				<category><![CDATA[生活随笔]]></category>
		<category><![CDATA[创业]]></category>
		<category><![CDATA[回忆]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2283</guid>

					<description><![CDATA[知乎上有一个提问，我们是如何一步一步走向平庸的？其中的 一个回答 让我印象深刻。 文中提到了一个英文单词 ma&#8230;]]></description>
										<content:encoded><![CDATA[<p>知乎上有一个提问，我们是如何一步一步走向平庸的？其中的 <a href="http://daily.zhihu.com/story/7718963" target="_blank">一个回答</a> 让我印象深刻。</p>
<p>文中提到了一个英文单词 maintenance，在 IT 人眼里这意味着网站故障宕机，又或者是 12306 服务器每晚定时下线维护。多么令人沮丧。</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2283"></span></p>
<p>而我们的生活，其实大部分的时间都用在 maintenance 上：一日三餐，上班，睡觉，上厕所，洗衣服，去超市采购食物……不知不觉，生命和时光就如流水一样溜走了。不禁想起朱自清先生写过的《匆匆》。</p>
<p>而这仅仅是物质生活的维持成本。在剩下的时间里，我们可能很难抽空会见一下老友，只好在朋友圈里刷刷新鲜事点点赞，更不用说多久能和父母联系一次，那么这就是我们维系社会关系的成本。</p>
<p>随着年龄的增长，我们需要 maintain 的事务也越来越多：事业、伴侣、孩子、父母……我们再也不像儿时那样有大把的时间，可以用在学习，探索这个世界。默默地大部分人都选择了同样的生活方式，不敢冒险，因为肩负重担。</p>
<p>那些杰出的人，无不是付出了巨大的努力才有回报。作家格拉德威尔在他类似“成功学”的《异类》一书中说道：“人们眼中的天才之所以卓越非凡，并非天资超人一等，而是付出了持续不断的努力。1 万小时的锤炼是任何人从平凡变成超凡的必要条件。” 要成为某个领域的专家，需要 10000 小时，如果每天工作八个小时，一周工作五天，那么至少需要五年。这也大概是一个 PhD 毕业所需要的时间。人生还要经历波澜，走一些弯路，那么这样看来似乎更加遥遥无期了。</p>
<p>我时常回想，从小学到中学，从中学到大学，自己何以抵达今时今日此时此地。令我惊讶的是我原来有着一些优秀的习惯。</p>
<p>例如之前总是在口袋里有一张小纸条，上面写着各种 todo list，让自己知道下一步的行动。真的是随身携带。当然现在已经有了手机便签记录。终究是令人怀念的。</p>
<p>再比如，高中时上学放学总是会在路上听英语。那时 mp3 都还未面世，索尼有一款 walkman 体型纤薄，代表了当时的最新科技，可是太贵，我记得大概要 1000 多块吧，当时家境拮据买不起。我就把富二代同桌的 walkman 无偿征用过来听英语磁带，反正是我哥们，他都用来上课听歌，回家也不用了。直到有一天，好像是在公交车上，他取下我的耳机说一起听一下，然后脸上就是“卧槽”的表情，“原来你每天借过去是听英语啊，哥还以为你听的是周杰伦，尼玛……” 哈哈哈哈……</p>
<p>反观现在呢？智能手机已经发展到如此便捷了，我却没有再保留这样的习惯，反而在汪身上看到了延续。据他说他已经利用路上的闲暇听完了整部《Zero to One》，以及《The hard thing about hard things》。真是不给人一丝喘息的机会。</p>
<p>开源，节流。是要做多一些时间管理了。</p>
<p>纯银在他的《<a href="http://www.jianshu.com/p/e0cbe93dd785" target="_blank">毕业季</a>》里情感真挚地写到——</p>
<blockquote><p>
我还没有真正熟悉这个校园啊。</p>
<p>却要离开了。</p>
<p>伤感得快要哭出来。
</p></blockquote>
<p>这世界很大，这世界就是校园。我想每个人都不愿在年老临终时对自己说，“我还没有真正熟悉这个世界啊，却要离开了。”</p>
<p>梦想般的人生就是，一直在做梦想中的事情。</p>
<p>功崇惟志，业广惟勤。</p>
<p>&#8211; EOF &#8211;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/good-habits.html/feed</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>Git tips: 合并 commit 保持分支干净整洁</title>
		<link>https://www.lovelucy.info/git-tips-combine-commits-keep-your-branch-clean.html</link>
					<comments>https://www.lovelucy.info/git-tips-combine-commits-keep-your-branch-clean.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Fri, 25 Dec 2015 08:25:08 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[配置]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2270</guid>

					<description><![CDATA[本文的读者需要已经了解 基本的 Git 操作和开发流程。 在我们开发完分支后，一般分支上会有很多 commit&#8230;]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/12/hero.png" rel="attachment wp-att-2278"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/12/hero.png" alt="git rebase" width="640" height="109" class="size-full wp-image-2278" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2015/12/hero.png 640w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/12/hero-300x51.png 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/12/hero-150x26.png 150w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>本文的读者需要已经了解 <a href="http://www.lovelucy.info/git-command-cheatsheet.html" target="_blank">基本的 Git 操作和开发流程</a>。</p>
<p>在我们开发完分支后，一般分支上会有很多 commit —— 少不了诸如 “fix typo”， “sth wrong in the previous commit” 之类的 commit。在合并到主干的时候，往往这类 commit 显得臃肿多余。为了方便别人做 code review，我们希望合并一些不必要的 commit 使我们的分支显得干净一目了然，也方便管理。有 3 种方式可以做到。</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2270"></span></p>
<h3 class="subtitle">一、git rebase</h3>
<pre lang="bash">
$ git rebase -i origin/master
</pre>
<p><code>-i</code> 参数表示互动 interactive，这时 git 会使用你设定的编辑器，让你对 git 历史记录做详细修改。</p>
<p>下面以 Atlassian 的例子来说明</p>
<pre lang="bash">
# 开始开发一个新 feature
$ git checkout -b new-feature master
# 改了一些代码
$ git commit -a -m "Start developing a feature"
# 刚刚的修改有点问题，再改一下
$ git commit -a -m "Fix something from the previous commit"

# 紧急修复，直接在 master 分支上改点东西
$ git checkout master
# 改了一些代码
$ git commit -a -m "Fix security hole"

# 开始交互式地 rebase 了
$ git checkout new-feature
$ git rebase -i master
</pre>
<p>这时 git 会打开编辑器，你会看到 new-feature 分支上的 2 个最新 commit，以及一些指引提示</p>
<pre lang="bash">
pick 32618c4 Start developing a feature
pick 62eed47 Fix something from the previous commit

# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
</pre>
<p>每个 commit 前有一个操作命令，默认是 <code>pick</code>，表示该行被选中，需要进行 rebase 操作。下面一堆注释的指引中还有几个指令，我们常用到的是以下 2 个</p>
<ul>
<li>squash：将这一行的 commit 与上一个 commit 进行合并</li>
<li>fixup：与 squash 相同，只是不会保留这行 commit 的提交 message 信息</li>
</ul>
<p>比如上面的例子，我们在编辑器中修改指令为</p>
<pre lang="bash">
pick 32618c4 Start developing a feature
squash 62eed47 Fix something from the previous commit
</pre>
<p>这样一改，保存执行后，new-feature 分支就只剩下 1 个 commit 了，这个合并后的 commit 提交的信息包含之前 2 个 commit 的信息</p>
<pre>
Start developing a feature
Fix something from the previous commit
</pre>
<p>消除了一个多余的不那么重要的 commit，达到了我们的目的。最后，只需 fast-forward merge 到 master</p>
<pre lang="bash">
$ git checkout master
$ git merge new-feature
</pre>
<p>在别人看来，你就是一个天才开发者，没有出差错地一次实现了 <code>new-feature</code>，项目的 commit 历史记录显得干净而有意义。</p>
<p>如果我们在编辑器中不用 squash 指令，而使用 fixup 指令，这样改</p>
<pre lang="bash">
pick 32618c4 Start developing a feature
fixup 62eed47 Fix something from the previous commit
</pre>
<p>则结果一样，还是只剩 1 个 commit，但是合并后的提交消息，就只有之前第一个 commit 的消息，第二个的 commit 消息被注释掉了</p>
<pre>
Start developing a feature
</pre>
<p>这样也达到了我们的目的，消除了曾经发生过 2 个 commit 的痕迹。在别人看来，这个新功能的分支是按计划一次性开发好的，中途并未发生 “错别字” 之类的意外，简直完美。</p>
<h3 class="subtitle">二、&#8211;fixup &#038; &#8211;autosquash</h3>
<pre lang="bash">
# 自动标记这一次的 commit 为上一个 commit 的 fix
$ git commit --fixup <commit>
# 自动组织合并两个 commit
$ git rebase -i --autosquash
</pre>
<p>这种方式和上面的第一种原理是一样的，只是形式上不是在编辑器中调整历史记录，而是直接执行命令，结果等同。</p>
<h3 class="subtitle">三、撤销过去的 commit 重建一个新的</h3>
<pre lang="bash">
$ git reset HEAD~2
$ git add .
$ git commit -am "This is the new feature"
$ git push --force
</pre>
<p>这种方式就比较暴力了，嗯。</p>
<hr>
<p>说点题外话</p>
<h3 class="subtitle">修改上一次 commit 提交的 message</h3>
<p>有时我们提交代码，message 写的太匆忙有错字（不是代码里有错字，而是 commit message 写错），就可以用下面的命令来修正</p>
<pre lang="bash">
$ git commit --amend
</pre>
<p>不过只能修正上一次的 commit。如果很多个 commit 之前就有 message 写错，就得用上我们之前说的 <code>git rebase</code> 了</p>
<pre lang="bash">
$ git rebase -i HEAD~4
</pre>
<p>和之前一样，会打开编辑器，显示最近的 4 次提交</p>
<pre lang="bash">
pick 07c5abd Introduce OpenPGP and teach basic usage
pick de9b1eb Fix PostChecker::Post#urls
pick 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend
</pre>
<p>将 pick 指令改为 reword 指令，就可以修改这一行的 commit message</p>
<pre lang="bash">
pick 07c5abd Introduce OpenPGP and teach basic usage
pick de9b1eb Fix PostChecker::Post#urls
reword 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend
</pre>
<p>&#8211; EOF &#8211;</p>
<p>参考文档</p>
<ul>
<li><a href="http://www.ruanyifeng.com/blog/2015/08/git-use-process.html" target="_blank">阮一峰：Git 使用规范流程</a></li>
<li><a href="https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase-i" target="_blank">Atlassian Git tutorials: Rewriting history</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/git-tips-combine-commits-keep-your-branch-clean.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>创业维艰</title>
		<link>https://www.lovelucy.info/the-hard-thing-about-hard-things.html</link>
					<comments>https://www.lovelucy.info/the-hard-thing-about-hard-things.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Sun, 12 Jul 2015 10:31:30 +0000</pubDate>
				<category><![CDATA[生活随笔]]></category>
		<category><![CDATA[创业]]></category>
		<category><![CDATA[香港]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2246</guid>

					<description><![CDATA[“最后一个问题，你为什么会加入这间公司？” 当这位前 Facebook 早期员工坐在我们办公室沙发上，突然问我&#8230;]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/07/interstellar-space-shuttle-do-not-go-gentle-into-that-good-night.jpg"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/07/interstellar-space-shuttle-do-not-go-gentle-into-that-good-night.jpg" alt="interstellar-space-shuttle-do-not-go-gentle-into-that-good-night" width="640" height="332" class="aligncenter size-full wp-image-2250" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2015/07/interstellar-space-shuttle-do-not-go-gentle-into-that-good-night.jpg 640w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/07/interstellar-space-shuttle-do-not-go-gentle-into-that-good-night-300x156.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/07/interstellar-space-shuttle-do-not-go-gentle-into-that-good-night-150x78.jpg 150w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>“最后一个问题，你为什么会加入这间公司？”</p>
<p>当这位前 Facebook 早期员工坐在我们办公室沙发上，突然问我这个问题的时候，我的脑海里浮现的都是去年夏天的情形。</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2246"></span></p>
<p>那时苹果的 iPhone 5s 才刚刚推出，香港的水客们正磨拳擦掌准备倒腾着大捞一笔。时间过得就是这么快，而日子仍旧慵懒地重复。我为了想要出售一部还不存在的手机，偶然的机缘在 V2EX 上结识了汪。然后汪社工了我，跑过来香港请我吃了顿饭，忽悠我到深圳又吃了顿饭。</p>
<p>“我想还是内心怀有创业的热忱吧”</p>
<p>坐在我对面这个人，亲历公司壮大到纳斯达克去敲钟，全身而退回到中国成立了一家 VC。这大概也是我在 <a href="http://www.lovelucy.info/just-so-so.html">不过如此</a> 中所描述的梦想。</p>
<p>内心深处的梦想，是为了 <a href="http://www.lovelucy.info/my-view-of-wealth.html">财富</a> 吗？阮叔曾经问我：“X 项目如果这样做，确实会很赚钱。每天看到大把的现金流，是会上瘾的。沉溺其中，你会不会迷失不能自拔。这是我担心的。”我用我有限的想象力瞬间去刻画了一下那个“大把现金流”的场景，结果仍然是 just so so。我说如果有幸可以做成，我也希望自己是一名连续创业者。</p>
<p>当然汪是有那种给人洗脑的气质的。“我的父亲就对我说，三十岁之前你不要考虑赚钱的事情，让自己成长。”所以从一开始做的，就是一件想要基业长青的事情。可是目前还只是一株小苗。当时汪大概给我讲了一个抱大树和种树的例子，“我要加入一家伟大的公司” vs “我要让这家公司因为我的加入而变得伟大”。</p>
<blockquote><p>
上士闻道，勤而行之；中士闻道，若存若亡；下士闻道，大笑之。
</p></blockquote>
<p>于是我开始满脑子都是各种鸡汤。你是活了 365 天，还是只活了一天，却重复了 365 次？走出舒适区，趁年轻多失败几次吧。培养自己的 sense，确保大部分情况下做出正确的决定。You are an engineer, why not build something?</p>
<p>香港的项目已经进入成熟维护期，我想我该重新出发了。于是我声泪俱下地写了一封巨感人的离职信 send 给了两位主管，跨境搬家，来到深圳开始了创业之旅。</p>
<p>爱因斯坦的广义相对论认为，在空间中的引力变化不仅会扭曲空间，也会改变时间。如同《Interstellar》中前往黑洞附近的星球不过数十分钟，回来却已经过了几十年。从日复一日的时间流逝无法感知，到残酷艰辛的战场，这半年来所经历的事情、认识的人，甚至超过了过去在香港三年的总和。工作从单纯的技术转向了打杂，处在自己不胜任的位置，我确实在不断地挑战，犯错和反思。</p>
<ul>
<li>不能因为缺人而降低招人的标准，防止笨蛋爆炸，劣币会驱逐良币</li>
<li>项目需要管理，员工需要辅导，解决问题而不是抱怨，团队需要正能量和士气</li>
<li>降低沟通成本，消除屏障，让信息在内部自由流通</li>
<li>使用已经被验证过的方案，不要盲目创新，更加精益</li>
<li>缺乏资源是常态，自己要想办法创造资源</li>
<li>……</li>
</ul>
<p>那些旁人看上去枯燥无味的教条，真真切切地成为了经验。创业看似富丽堂皇，但其实荆棘满路，现实很艰苦，所以做自己最 passionate 的事情最重要。</p>
<p>就如同在 MIT 毕业典礼上 Drew Houston 说过的：“你们也许觉得，创立 Dropbox 是我一生中最刺激、有趣、有成就感的事情。而我却没有告诉你们，它也是让我觉得最丢脸、沮丧、痛苦的经历。我甚至记不清我犯错的次数。幸运的是，这都无所谓。在现实生活中，你最大的危险不是失败，而是太安逸。我们只需要走对一次。”</p>
<div class="aligncenter">
<embed src="http://player.youku.com/player.php/sid/XNjUwMTc3OTg4/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>
</div>
<p>某一期盒饭会上，松哥说，创业这个事情就是这样，挫败就是磨砺和修行，如果有那么一段时期让你觉得很不爽，就说明你上道了。而我脑袋里一直回荡的还是《Interstellar》的那句——</p>
<blockquote><p>
Do not go gentle into that good night&#8230;
</p></blockquote>
<p>&#8211; EOF &#8211;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/the-hard-thing-about-hard-things.html/feed</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署</title>
		<link>https://www.lovelucy.info/auto-deploy-website-by-webhooks-of-github-and-gitlab.html</link>
					<comments>https://www.lovelucy.info/auto-deploy-website-by-webhooks-of-github-and-gitlab.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Mon, 19 Jan 2015 14:06:59 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[配置]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2148</guid>

					<description><![CDATA[老早就想写这个话题了，今天正好有机会研究了一下 git 的自动化部署。最终做到的效果就是，每当有新的 comm&#8230;]]></description>
										<content:encoded><![CDATA[<p>老早就想写这个话题了，今天正好有机会研究了一下 git 的自动化部署。最终做到的效果就是，每当有新的 commit push 到 master 分支的时候，就自动在测试/生产服务器上进行 git pull 拉取最新的代码，免去了程序猿兼职运维 ssh 上去拉代码部署的重复性工作。我们也要 Agile development 不是？什么敏捷开发啊，极限编程啊，快速迭代啊，持续集成啊，精益创业啊，口号怎么高端怎么来，最后就是写了个自动化脚本……</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2148"></span></p>
<h3 class="subtitle">一、自动化部署脚本</h3>
<p>首先要保证要部署的 Web 目录就是 git clone 下来的一个 repository。这样 rollback 也方便，直接 checkout 某一个历史版本就好。</p>
<p>很简单地写了个 shell 脚本 <code>deploy.sh</code></p>
<pre lang="bash">
#!/bin/bash

WEB_PATH='/var/www/dev.lovelucy.info'
WEB_USER='lovelucydev'
WEB_USERGROUP='lovelucydev'

echo "Start deployment"
cd $WEB_PATH
echo "pulling source code..."
git reset --hard origin/master
git clean -f
git pull
git checkout master
echo "changing permissions..."
chown -R $WEB_USER:$WEB_USERGROUP $WEB_PATH
echo "Finished."
</pre>
<p>下面要做的就是每当有 push 的时候就自动调用这个脚本。</p>
<h3 class="subtitle">二、监听 Web Hooks</h3>
<p>GitHub 和 GitLab 本身都支持 Webhooks 的设定</p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-webhooks.jpg"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-webhooks.jpg" alt="github-webhooks" width="640" height="419" class="aligncenter size-full wp-image-2149" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-webhooks.jpg 929w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-webhooks-300x196.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-webhooks-150x98.jpg 150w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-webhooks-900x589.jpg 900w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/gitlab-webhooks.jpg"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/gitlab-webhooks.jpg" alt="gitlab-webhooks" width="640" height="247" class="aligncenter size-full wp-image-2150" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/gitlab-webhooks.jpg 950w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/gitlab-webhooks-300x116.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/gitlab-webhooks-150x58.jpg 150w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/gitlab-webhooks-900x347.jpg 900w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>那个 Payload URL 上填上需要部署到的服务器的网址，比方说 http://dev.lovelucy.info/incoming。然后之后每次有 push 事件 GitHub 都会主动往这个地址发送一个 POST 请求，当然你也可以选择任何事件都发个  POST 通知你。GitHub 还有个 Secret 的设定，就是一个字符串，如果加上的话就在 POST 请求的 HTTP 头中会带一个 Hash 值做验证密文，证明这个 POST 真是来自 GitHub，不然任何人都往那个地址 POST 忽悠你你都不知道谁是谁对吧……</p>
<p>然后我们就要写一个脚本在 http://dev.lovelucy.info/incoming 这里接受 POST 请求了。因为本人机器上跑的是 node，俺就找了个 nodejs 的中间件 <a href="https://github.com/rvagg/github-webhook-handler" title="github-webhook-handler" target="_blank">github-webhook-handler</a> 。如果你要部署的是 PHP 网站，那你应该找一个<del datetime="2015-01-19T11:58:16+00:00">世界上最好的语言</del> PHP 的版本，或者自己写一个，只需要接收 <code>$_POST</code> 嘛，好简单的，不多废话啦。么么哒  ( • ̀ω•́ )</p>
<pre lang="bash">
$ npm install -g github-webhook-handler
</pre>
<p>鉴于在天朝的服务器上 npm 拉 repo 比拉屎还难的状况，我们可以 <a href="https://cnodejs.org/topic/53330242edf0031c2c00ca81" target="_blank">选用</a> 阿里的<a href="https://npm.taobao.org/" target="_blank">镜像</a>，据说 10 分钟和官方同步一次。_(:3 」∠ )_</p>
<pre lang="bash">
$ npm install -g cnpm --registry=http://r.cnpmjs.org
$ cnpm install -g github-webhook-handler 
</pre>
<p>好了，万事俱备，下面是 NodeJS 的监听程序 <code>deploy.js</code></p>
<pre lang="javascript">
var http = require('http')
var createHandler = require('github-webhook-handler')
var handler = createHandler({ path: '/incoming', secret: 'myHashSecret' }) 
// 上面的 secret 保持和 GitHub 后台设置的一致

function run_cmd(cmd, args, callback) {
  var spawn = require('child_process').spawn;
  var child = spawn(cmd, args);
  var resp = "";

  child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
  child.stdout.on('end', function() { callback (resp) });
}

http.createServer(function (req, res) {
  handler(req, res, function (err) {
    res.statusCode = 404
    res.end('no such location')
  })
}).listen(7777)

handler.on('error', function (err) {
  console.error('Error:', err.message)
})

handler.on('push', function (event) {
  console.log('Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref);
  run_cmd('sh', ['./deploy-dev.sh'], function(text){ console.log(text) });
})

/*
handler.on('issues', function (event) {
  console.log('Received an issue event for % action=%s: #%d %s',
    event.payload.repository.name,
    event.payload.action,
    event.payload.issue.number,
    event.payload.issue.title)
})
*/
</pre>
<p>于是直接就可以跑起来了</p>
<pre lang="bash">
$ nodejs deploy.js
</pre>
<p>当然为了防止 NodeJS 自己挂掉，我们可以启用进程管理服务 <a href="https://github.com/foreverjs/forever" target="_blank">forever</a>，它类似 python 里面的 supervisor。</p>
<pre lang="bash">
$ cnpm install -g forever
$ forever start deploy.js
</pre>
<p>这样就算这段 NodeJS 代码某处出错挂了，它也会自动重新启动一个进程，保证服务仍可用。forever 的几个命令还是蛮简单的</p>
<pre lang="bash">
$ forever list
$ forever stop 1
$ forever restartall
</pre>
<p>上面的 NodeJS 将 Web 服务跑在了 7777 端口，我们可以用 Nginx 反向代理到 80 端口（可选）</p>
<pre>
server {
    listen 80;
    server_name dev.lovelucy.info;

    # ...

    location / {
        # ...
    }

    location /incoming$ {
        proxy_pass http://127.0.0.1:7777;
    }
}
</pre>
<h3 class="subtitle">三、集成第三方 Service</h3>
<p>注意到 GitHub 项目后台还有个 Service 的 tab 没？</p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-service.jpg"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-service.jpg" alt="github-service" width="640" height="324" class="aligncenter size-full wp-image-2153" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-service.jpg 711w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-service-300x152.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2015/01/github-service-150x76.jpg 150w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>这是 GitHub 官方集成的大量的第三方服务，有点类似 IFTTT 的节奏，能做的事情就很多了。比如我设定了如果有人 push 代码，就在我们 hipchat 内部聊天群里发一个通知；如果有人提 issue，就自动给他回一封 welcome 的邮件……</p>
<p>GitLab 也有这些，更多玩法还是自己去钻研吧~ </p>
<p>&#8211; EOF &#8211;</p>
<p>最后，催我写年终总结的童鞋，我不是真的忘了，要写的很多，最近太忙，等放假了一定补上……<br />
(๑•́ ₃ •̀๑)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/auto-deploy-website-by-webhooks-of-github-and-gitlab.html/feed</wfw:commentRss>
			<slash:comments>25</slash:comments>
		
		
			</item>
		<item>
		<title>信息量</title>
		<link>https://www.lovelucy.info/information.html</link>
					<comments>https://www.lovelucy.info/information.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Sat, 26 Jul 2014 10:13:27 +0000</pubDate>
				<category><![CDATA[生活随笔]]></category>
		<category><![CDATA[创业]]></category>
		<category><![CDATA[回忆]]></category>
		<category><![CDATA[阅读]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2114</guid>

					<description><![CDATA[突然感到无比赞同 Livid 关于“信息量”的阐述。 信息不对等在这个世界无处不在。香港本地的电子商务并不发达&#8230;]]></description>
										<content:encoded><![CDATA[<p>突然感到无比赞同 Livid 关于“信息量”的阐述。</p>
<p>信息不对等在这个世界无处不在。香港本地的电子商务并不发达，就有那么一群人，专从大陆的淘宝网购入新奇的产品，快递运至本地便加价甚至以数倍的价钱卖出。所谓商业，不就是利用这种不对称的信息低买高卖的牟利活动吗？差价便是信息的价值。代码、技术并不是你所处的信息产业的全部，核心仍然是“信息”。</p>
<p>你通过上网读书获取信息，你通过工作写作输出信息。所以你所做的就是传递你所了解的信息，用你所掌握的知识和信息量去为这个世界产生有益的价值，同时换取回报的薪水。日复一日。人的一生本质就是在与周遭的世界进行信息的交换。</p>
<p>你需要不断积累自己所热爱的方向上的信息量。归纳和整理。丢弃那些质量低劣的，分享那些深刻有趣的。</p>
<p>不间断地学习就是庞大的输入，当你积累和总结到了某个阶段的时候，你会发现有相当多的人需要你所积累的信息，去创造，去改变。输出，帮助别人，这个世界自然也会给你丰厚的回报。</p>
<p>物理学家可能会将眼前的事物看作一堆原子夸克以及力的相互作用；法律学者则会解读出人类社会中什么是公平正义；而你看，在一个 IT 人眼里，世界就是上面这个样子。潜移默化中，这样的信念会成为你价值观的一部分。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/information.html/feed</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Git 常用命令备忘</title>
		<link>https://www.lovelucy.info/git-command-cheatsheet.html</link>
					<comments>https://www.lovelucy.info/git-command-cheatsheet.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Wed, 23 Jul 2014 12:14:03 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[配置]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2109</guid>

					<description><![CDATA[Git 常用命令备忘 Git 配置 git config --global user.email "i@lov&#8230;]]></description>
										<content:encoded><![CDATA[<p>Git 常用命令备忘</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2109"></span></p>
<h3 class="subtitle">Git 配置</h3>
<pre lang="bash">
git config --global user.email "i@lovelucy.info"
git config --global color.ui true
git config --global core.editor vim # 设置编辑器为 vim
git config -l                       # 列举所有配置
</pre>
<p>用户的 git 配置文件路径 <code>~/.gitconfig</code><br />
项目的 git 配置文件路径 <code>project/.git/config</code></p>
<p>项目配置会覆盖全局配置</p>
<h3 class="subtitle">Git 常用命令</h3>
<p>查看、添加、提交、删除、找回，重置修改文件</p>
<pre lang="bash">
git show                # 显示某次提交的内容
git show $id

git checkout  -- <file> # 抛弃工作区修改
git checkout  .         # 抛弃工作区修改

git add <file>          # 将工作文件修改提交到本地暂存区
git add .               # 将所有修改过的工作文件提交暂存区

git rm <file>           # 从版本库中删除文件
git rm <file> --cached  # 从版本库中删除文件，但不删除文件

git reset <file>        # 从暂存区恢复到工作文件
git reset -- .          # 从暂存区恢复到工作文件
git reset --hard        # 恢复最近一次提交过的状态，即放弃上次提交后的所有本次修改

git commit <file>
git commit .
git commit -a           # 将 git add, git rm 和 git ci 等操作都合并在一起做
git commit -am "some comments"
git commit --amend      # 修改最后一次提交记录

git revert <$id>        # 恢复某次提交的状态，恢复动作本身也创建了一次提交对象
git revert HEAD         # 恢复最后一次提交的状态
</pre>
<p>查看文件 diff</p>
<pre lang="bash">
git diff <file>                  # 比较当前文件和暂存区文件差异
git diff
git diff <$id1> <$id2>           # 比较两次提交之间的差异
git diff <branch1>..<branch2>    # 在两个分支之间比较 
git diff --staged                # 比较暂存区和版本库差异
git diff --cached                # 比较暂存区和版本库差异
git diff --stat                  # 仅仅比较统计信息
</pre>
<p>查看提交记录</p>
<pre lang="bash">
git log
git log <file>          # 查看该文件每次提交记录
git log -p <file>       # 查看每次详细修改内容的 diff
git log -p -2           # 查看最近两次详细修改内容的 diff
</pre>
<h3 class="subtitle">Git 本地分支管理</h3>
<p>查看、切换、创建和删除分支</p>
<pre lang="bash">
git branch -r           # 查看远程分支
git branch <new_branch> # 创建新的分支
git branch -v           # 查看各个分支最后提交信息
git branch --merged     # 查看已经被合并到当前分支的分支
git branch --no-merged  # 查看尚未被合并到当前分支的分支

git checkout <branch>   # 切换到某个分支
git checkout -b <new_branch> # 创建新的分支，并且切换过去
git checkout -b <new_branch> <branch>  # 基于 branch 创建新的new_branch

git checkout $id        # 把某次历史提交记录 checkout 出来，但无分支信息，切换到其他分支会自动删除
git checkout $id -b <new_branch>  # 把某次历史提交记录 checkout 出来，创建成一个分支

git branch -d <branch>  # 删除某个分支
git branch -D <branch>  # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
</pre>
<p>分支合并和 rebase</p>
<pre lang="bash">
git merge <branch>               # 将 branch 分支合并到当前分支
git merge origin/master --no-ff  # 不要 Fast-Foward 合并，这样可以生成 merge 提交

git rebase master <branch>       # 将 master rebase 到 branch，相当于：
git checkout <branch> && git rebase master && git checkout master && git merge <branch>
</pre>
<h3 class="subtitle">Git 暂存管理</h3>
<pre lang="bash">
git stash               # 暂存
git stash list          # 列所有stash
git stash apply         # 恢复暂存的内容
git stash drop          # 删除暂存区
</pre>
<h3 class="subtitle">Git 远程分支管理</h3>
<pre lang="bash">
git pull                         # 抓取远程仓库所有分支更新并合并到本地
git pull --no-ff                 # 抓取远程仓库所有分支更新并合并到本地，不要快进合并
git fetch origin                 # 抓取远程仓库更新
git merge origin/master          # 将远程主分支合并到本地当前分支
git checkout --track origin/branch     # 跟踪某个远程分支创建相应的本地分支
git checkout -b <local_branch> origin/<remote_branch>  # 基于远程分支创建本地分支，功能同上

git push                         # push所有分支
git push origin master           # 将本地主分支推到远程主分支
git push -u origin master        # 将本地主分支推到远程(如无远程主分支则创建，用于初始化远程仓库)
git push origin <local_branch>   # 创建远程分支， origin是远程仓库名
git push origin <local_branch>:<remote_branch>  # 创建远程分支
git push origin :<remote_branch>  #先删除本地分支(git branch -d <branch>)，然后再push删除远程分支
</pre>
<h3 class="subtitle">Git 远程仓库管理</h3>
<pre lang="bash">
git remote -v                    # 查看远程服务器地址和仓库名称
git remote show origin           # 查看远程服务器仓库状态
git remote add origin git@github.com:whuhacker/Unblock-Youku-Firefox.git         # 添加远程仓库地址
git remote set-url origin git@github.com:whuhacker/Unblock-Youku-Firefox.git # 设置远程仓库地址(用于修改远程仓库地址)
git remote rm <repository>       # 删除远程仓库
</pre>
<p>设置跟踪远程库和本地库</p>
<pre lang="bash">
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/git-command-cheatsheet.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>在 Yii2 项目中使用 Composer 添加 FontAwesome 字体资源</title>
		<link>https://www.lovelucy.info/adding-fontawesome-to-your-yii2-project-via-composer.html</link>
					<comments>https://www.lovelucy.info/adding-fontawesome-to-your-yii2-project-via-composer.html#respond</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Sat, 21 Jun 2014 11:05:57 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2094</guid>

					<description><![CDATA[前天帮同事改个十年前的网站 bug，页面上一堆 include require 不禁让人抱头痛哭。看到 V2E&#8230;]]></description>
										<content:encoded><![CDATA[<p>前天帮同事改个十年前的网站 bug，页面上一堆 include require 不禁让人抱头痛哭。看到 V2EX 上的讨论说，写 PHP 不用框架等同于耍流氓。Yii Framework 是我使用了 2 年多的 PHP 框架，器大活好，皮实耐操。 Yii2 还在 Beta 中，不过不影响拿来预研。</p>
<p>这回要说的是，如何给 Yii2 项目添加外部资源（external assets），以 FontAwesome 为例子。</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2094"></span></p>
<p>Yii2 开始使用 composer 来做项目的依赖管理，这货是类似于 NodeJS 里面 npm 的东东，可以自动获取 Github 上最新版本的第三方库（比如 Bootstrap 啦，FontAwesome 啦之类的）。按官方教程装好后，就可以开始初始化项目了。</p>
<h3 class="subtitle">一、初始化项目</h3>
<p>通过 Composer 来初始化</p>
<pre lang="bash">
php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
</pre>
<p>然后开始码代码，Model Controller View 神马的，此处按下不表。</p>
<h3 class="subtitle">二、安装 FontAwesome</h3>
<p>终于，你的项目发展到需要引用第三方库了，我们仍然通过 Composer 来安装。搜索 <a href="https://packagist.org" title="composer packages" target="_blank">packagist.org</a> 官方的包列表，我们找到了 FontAwesome 的配置。将 <code>FortAwesome/Font-Awesome": "*"</code> 添加到项目的 composer.json 配置文件里。</p>
<pre lang="php">
// ...
"require": {
    "php": ">=5.4.0",
    "hybridauth/hybridauth": "dev-master",
    "FortAwesome/Font-Awesome": "*", // <- 这里
    "yiisoft/yii2": "*",
    "yiisoft/yii2-swiftmailer": "*",
    "yiisoft/yii2-bootstrap": "*",
    "yiisoft/yii2-debug": "*",
    "yiisoft/yii2-gii": "*"
},
// ...
</pre>
<p>然后运行</p>
<pre lang="bash">
php composer.phar update
</pre>
<p>从 Github 上拉取 FontAwesome 的包到项目本地。</p>
<h3 class="subtitle">三、创建 FontAwesome 资源包（asset bundle）</h3>
<p>为了使用这些库，我们需要在项目的 <code>/assets</code> 目录下创建一个 <code>FontAwesomeAsset.php</code></p>
<pre lang="php">
namespace assets;
use yii\web\AssetBundle;
class FontAwesomeAsset extends AssetBundle
{
    // 下面这些资源文件并不在 web 目录下，浏览器无法直接访问。所以我们需要
    // 指定 sourcePath 属性。注意 @vendor 这个 alias，表示 vender 目录
    public $sourcePath = '@vendor/fortawesome/font-awesome';
    public $css = [
        'css/font-awesome.css',
    ];
}
</pre>
<h3 class="subtitle">四、注册文件，引入资源</h3>
<p>有两种方法。第一种，当你想在某一个特定页面引入这个资源包</p>
<pre lang="php">
// 这两句直接写在那一页的 view 里
use assets\FontAwesomeAsset;
FontAwesomeAsset::register($this);
</pre>
<p>第二种，在你的网站全局引入，或者将其作为另一个资源的依赖引用。在项目的 asset/AppAsset.php 中加上它：</p>
<pre lang="php">
class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/site.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
        // 在这里加上我们的 FontAwesomeAsset 包类
        'assets\FontAwesomeAsset'
    ];
}
</pre>
<p>刷新页面，看看是不是已经引入了对应的 css、js 资源。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/adding-fontawesome-to-your-yii2-project-via-composer.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>将代码库从 SVN 迁移至 Git 并保留所有 commit 记录</title>
		<link>https://www.lovelucy.info/codebase-from-svn-to-git-migration-keep-commit-history.html</link>
					<comments>https://www.lovelucy.info/codebase-from-svn-to-git-migration-keep-commit-history.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Thu, 15 May 2014 11:28:37 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[配置]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2070</guid>

					<description><![CDATA[公司内部原本使用 SVN 进行版本控制，但随着 Github 的流行我个人的代码管理习惯逐渐转变。虽然公司项目&#8230;]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab2.jpg"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab2.jpg" alt="gitlab2" width="640" height="310" class="aligncenter size-full wp-image-2074" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab2.jpg 1072w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab2-300x145.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab2-1024x496.jpg 1024w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab2-150x72.jpg 150w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab2-900x436.jpg 900w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>公司内部原本使用 SVN 进行版本控制，但随着 Github 的流行我个人的代码管理习惯逐渐转变。虽然公司项目并非开源，SVN 所具有的标准 trunk / branches / tags 结构完全够用，使用 Git 仍然有如下优势：</p>
<ul>
<li><strong>类似 GitHub 的 <a href="https://www.gitlab.com/" title="GitLab" target="_blank">GitLab</a> 免费管理工具。</strong>将代码托管在自己内部服务器上的同时，提供了优美的 web 界面，图形化分支结构，更直观的代码审查，统计、issue 系统、wiki 等功能全面集成。</li>
<li><strong>更方便主程做 code review，控制代码质量。</strong>创建主仓库，多人开发时使用 fork 模式，每个人拥有自己独立的 repo，独立的 trunk / branches，最后发送 pull request 进行代码合并。</li>
<li><strong>commit 和 push 更快。</strong>体现在 push 到远程仓库时 Git 会先对所有需要上传的文件进行 zip 打包压缩，然后一次性传输，在远程服务器解压，全部自动完成。而 SVN 则是一个一个文件地上传，代码是纯文本，总体积并不大，但是大量零碎的小文件频繁建立网络连接造成延迟。这在升级第三方的库或者框架时，成千上万的文件更新更加让人难以忍受。</li>
<li><strong>hook 可以更方便做自动化部署。</strong>当然这个 SVN 也有。</li>
</ul>
<p>权衡后我决定花时间进行代码仓库的迁移。代码迁移并非简单地创建 Git repo 把当前项目代码一次性 commit 过去就够了，因为 SVN 中存有长年累月的 commit 历史记录，丢失历史记录将对今后追溯 debug 造成非常大的麻烦，所以如何保留 commit 记录就是迁移的关键。</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2070"></span></p>
<h3 class="subtitle">一、迁移步骤</h3>
<p>创建用户映射 （例如 <code>users.txt</code>） ，将 SVN 用户和 Git 用户对应起来:</p>
<blockquote><p>
user1 = First Last Name &lt;email@address.com&gt;<br />
user2 = First Last Name &lt;email@address.com&gt;<br />
&#8230;</p></blockquote>
<p>如果上面的文件中有用户缺失，后面的 SVN 命令将会停止。不过你可以更新用户映射然后接着再来（类似断点续传）。</p>
<p>现在从 SVN 仓库中拉取所有数据：</p>
<pre lang="bash">
git svn clone --stdlayout --no-metadata -A users.txt svn://hostname/path dest_dir-tmp
</pre>
<p>这个命令将会在 <code>dest_dir-tmp</code> 新建一个 Git repo，并开始从 SVN 中拉取代码。请注意 &#8220;<code>--stdlayout</code>&#8221; 参数表示你的项目在 SVN 中是常见的 &#8220;<code>trunk/branches/tags</code>&#8221; 目录结构，如果不是，那你需要使用 <code>--tags</code>, <code>--branches</code>, <code>--trunk</code> 参数（请通过 <code>git svn help</code> 自行了解）。</p>
<p>再后面的参数是 SVN 的地址，一些常见协议都是支持的 : <code>svn://</code>, <code>http://</code>, <code>https://</code>. 注意这个 URL 应该指向项目的 base repository，例如 <code>http://svn.mycompany.com/myrepo/repository</code>. 不要指到了 <code>/trunk</code>, <code>/tag</code> 或 <code>/branches</code> 里。</p>
<p>如果出现用户名没找到，更新你的 <code>users.txt</code> 文件，然后</p>
<pre lang="bash">
cd dest_dir-tmp
git svn fetch
</pre>
<p>如果你的项目非常大，你可能需要重复上面的命令好几次，直到所有的 SVN commit 都被抓下来了：</p>
<pre lang="bash">
git svn fetch
</pre>
<p>完成后，Git 将会 checkout SVN 的 trunk 到一个新的 Git branch，而其他的 SVN branch 将会设为 Git remote，你可以查看所有的 SVN branch：</p>
<pre lang="bash">
git branch -r
</pre>
<p>如果你想在你的 Git repo 中保留其他的 remote branch，你需要手动创建本地 branch。否则，SVN 的 branch 将不会在最后被 clone。</p>
<pre lang="bash">
git checkout -b local_branch remote_branch
# it's ok if local_branch and remote_branch are the same name
</pre>
<p>SVN tags 被当作 branch 导入了，你需要创建本地 branch，打一个 tag，然后删掉那个 branch，这样才会在 Git 中生成 tag。例如 SVN tag &#8220;v1&#8221;:</p>
<pre lang="bash">
git checkout -b tag_v1 remotes/tags/v1
git checkout master
git tag v1 tag_v1
git branch -D tag_v1
</pre>
<p>把上面的 GIT-SVN repo Clone 到一个全新的干净 git repo:</p>
<pre lang="bash">
git clone dest_dir-tmp dest_dir
rm -rf dest_dir-tmp
cd dest_dir
</pre>
<p>之前从 remote branch 创建的本地 branch 又会在新 clone 的 repo 中成为 remote branch，于是对每个 branch 再做一次：</p>
<pre lang="bash">
git checkout -b local_branch origin/remote_branch
</pre>
<p>最后，从干净的 Git repo 中删掉 remote （指向我们刚刚已经删掉的 temp repo）</p>
<pre lang="bash">
git remote rm origin
</pre>
<p>这样一个全新 Git repo 就已经从 SVN 迁移好了。</p>
<h3 class="subtitle">二、新的 Git 远程仓库</h3>
<p>将本地的 Git repo push 到远程仓库（我这里用的是 GitLab）：</p>
<pre lang="bash">
git remote add origin git@git.udev.hk:udba/udba.git
git push -u origin master
</pre>
<p>push 所有的 branch：</p>
<pre lang="bash">
git push origin --all
</pre>
<p>push 所有的 tag：</p>
<pre lang="bash">
git push origin --tags
</pre>
<p>最后再放两张 GitLab 的截图</p>
<div class="wp-caption aligncenter">
<a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab1.jpg"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab1.jpg" alt="gitlab1" width="640" height="310" class="aligncenter size-full wp-image-2073" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab1.jpg 1072w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab1-300x145.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab1-1024x496.jpg 1024w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab1-150x72.jpg 150w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab1-900x436.jpg 900w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p class="wp-caption-text">在线阅读代码</p>
</div>
<div class="wp-caption aligncenter">
<a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab3.jpg"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab3.jpg" alt="gitlab3" width="640" height="453" class="aligncenter size-full wp-image-2072" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab3.jpg 1032w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab3-300x212.jpg 300w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab3-1024x725.jpg 1024w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab3-150x106.jpg 150w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/05/gitlab3-900x637.jpg 900w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p class="wp-caption-text">图形化统计数据</p>
</div>
<p>&#8211; EOF &#8211;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/codebase-from-svn-to-git-migration-keep-commit-history.html/feed</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>在 Android 上使用 Unblock Youku 观看国内视频</title>
		<link>https://www.lovelucy.info/unblock-youku-on-android.html</link>
					<comments>https://www.lovelucy.info/unblock-youku-on-android.html#comments</comments>
		
		<dc:creator><![CDATA[lovelucy]]></dc:creator>
		<pubDate>Wed, 16 Apr 2014 16:11:40 +0000</pubDate>
				<category><![CDATA[网络]]></category>
		<category><![CDATA[Unblock Youku]]></category>
		<category><![CDATA[配置]]></category>
		<guid isPermaLink="false">http://www.lovelucy.info/?p=2044</guid>

					<description><![CDATA[国内的优酷、土豆、搜狐、爱奇艺等网站上的很多正版影视资源屏蔽了海外 IP，仅限中国大陆用户观看。为了解除地域限&#8230;]]></description>
										<content:encoded><![CDATA[<p>国内的优酷、土豆、搜狐、爱奇艺等网站上的很多正版影视资源屏蔽了海外 IP，仅限中国大陆用户观看。为了解除地域限制，很多海外华人使用 <a href="http://www.lovelucy.info/tag/unblock-youku" target="_blank">Unblock Youku</a> 浏览器插件，iOS 设备则可以 <a href="http://www.lovelucy.info/unblock-youku-on-ipad.html" title="在 iPad 上使用 Unblock Youku 观看大陆网站影片" target="_blank">设定 PAC 代理</a>，而现在使用安卓平板和手机的用户通过 Drony 也可以 Unblock Youku 了。</p>
<p><div class="clear-block"><div class="ad aligncenter"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- lovelucy响应式 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-0142633787994349"
     data-ad-slot="1891184341"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div></div><span id="more-2044"></span></p>
<p>Drony 是 Android 系统上的一个 app，它支持和 iOS 一样的 PAC 自动代理配置，使用它配合 Unblock Youku 的 PAC 文件，浏览影音网站以及优酷土豆等官方 app 均可解封，且不影响系统上其他 apps 正常使用，不影响上下载速度。</p>
<h3 class="subtitle">一、设置步骤</h3>
<p>首先请前往 Google Play 官方下载安装 Drony：<br />
<a href="https://play.google.com/store/apps/details?id=org.sandroproxy.drony" target="_blank">https://play.google.com/store/apps/details?id=org.sandroproxy.drony</a></p>
<h4>1. 打开 Drony，进入 setting</h4>
<p>在 WiFi 下，选择你正在使用的 WiFi 网络：</p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android1.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android1.png" alt="unblock-youku-android1" width="240" height="427" class="size-full wp-image-2047" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android1.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android1-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android1-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a> <a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android2.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android2.png" alt="unblock-youku-android2" width="240" height="427" class="size-full wp-image-2048" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android2.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android2-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android2-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a></p>
<p>在 3G/4G 网络环境中，则选择 Setting for not listed networks</p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android3.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android3.png" alt="unblock-youku-android3" width="240" height="427" class="size-full wp-image-2049" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android3.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android3-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android3-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a></p>
<h4>2. 修改 Script Proxy 设置，输入 PAC 地址，并下载，测试，保存</h4>
<pre>
http://yo.uku.im/proxy.pac
</pre>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android4.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android4.png" alt="unblock-youku-android4" width="240" height="427" class="size-full wp-image-2050" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android4.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android4-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android4-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a> <a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android5.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android5.png" alt="unblock-youku-android5" width="240" height="427" class="size-full wp-image-2051" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android5.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android5-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android5-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a></p>
<h4>3. 修改 Proxy Type 为 Script</h4>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android6.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android6.png" alt="unblock-youku-android6" width="240" height="427" class="size-full wp-image-2052" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android6.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android6-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android6-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a></p>
<h4>4. 启动 Drony</h4>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android7.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android7.png" alt="unblock-youku-android7" width="240" height="427" class="size-full wp-image-2053" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android7.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android7-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android7-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a></p>
<h4>5. 修改系统代理设置</h4>
<p>WiFi 网络环境：</p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android8.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android8.png" alt="unblock-youku-android8" width="240" height="427" class="size-full wp-image-2054" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android8.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android8-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android8-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a> <a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android9.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android9.png" alt="unblock-youku-android9" width="240" height="427" class="size-full wp-image-2045" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android9.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android9-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android9-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a></p>
<p>3G 网络环境：进入 APN 设置，修改代理和端口</p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android10.png"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android10.png" alt="unblock-youku-android10" width="240" height="427" class="size-full wp-image-2046" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android10.png 240w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android10-168x300.png 168w, https://www.lovelucy.info/wordpress/wp-content/uploads/2014/04/unblock-youku-android10-84x150.png 84w" sizes="(max-width: 240px) 100vw, 240px" /></a></p>
<h3 class="subtitle">二、检查代理设置是否成功</h3>
<p>按照上面的步骤设置之后，可以在浏览器中打开页面 <a href="http://ipservice.163.com/isFromMainland" title="中国大陆IP地址检测" target="_blank">http://ipservice.163.com/isFromMainland</a></p>
<p>如果页面显示的是 true，便说明代理设置完毕，例如下图中的结果</p>
<p><a href="http://www.lovelucy.info/wordpress/wp-content/uploads/2012/12/unblock-youku-android11.jpg"><img loading="lazy" src="http://www.lovelucy.info/wordpress/wp-content/uploads/2012/12/unblock-youku-android11.jpg" alt="中国大陆IP地址检测" width="250" height="108" class="aligncenter size-full wp-image-2062" srcset="https://www.lovelucy.info/wordpress/wp-content/uploads/2012/12/unblock-youku-android11.jpg 250w, https://www.lovelucy.info/wordpress/wp-content/uploads/2012/12/unblock-youku-android11-150x64.jpg 150w" sizes="(max-width: 250px) 100vw, 250px" /></a></p>
<h3 class="subtitle">三、代理服务器状态监控</h3>
<p>设置好 PAC 后，如果遇到以上测试返回 false 的情况，有可能是我们的转发服务器遇到了问题。参考下面的状态图便于查看服务器最近的运行状态，点击图片可以得到更详细的信息。</p>
<p><a href="http://stats.pingdom.com/7w8lzo3be6k1/700754"><img src="https://share.pingdom.com/banners/bf92c6bd" alt=""></a></p>
<p><a href="http://stats.pingdom.com/7w8lzo3be6k1/700754"><img src="https://share.pingdom.com/banners/245cc752" alt=""></a></p>
<p>感谢 <a href="https://github.com/grjegreagjergjerja" target="_blank">@grjegreagjergjerja</a> 推荐 Drony 以及感谢 <a href="https://github.com/karlcheong" target="_blank">@karlcheong</a> 的辛苦测试。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 分割线 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<h3 class="subtitle">Firefox 浏览器使用 Unblock Youku</h3>
<p>请参考 <a href="http://www.lovelucy.info/unblock-youku-firefox-addon.html" title="Firefox 版 Unblock Youku 插件终于发布啦！">Firefox 版 Unblock Youku 插件终于发布啦！</a></p>
<h3 class="subtitle">iPhone、iPad 等 iOS 设备</h3>
<p>请参考 <a href="http://www.lovelucy.info/unblock-youku-on-ipad.html" title="在 iPad 上使用 Unblock Youku 观看大陆网站影片">在 iPad 上使用 Unblock Youku 观看大陆网站影片</a></p>
<p>&#8211; EOF &#8211;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lovelucy.info/unblock-youku-on-android.html/feed</wfw:commentRss>
			<slash:comments>59</slash:comments>
		
		
			</item>
	</channel>
</rss>
