每一個可以努力的日子,都是一份厚禮。
配置
Git tips: 合併 commit 保持分支幹凈整潔
2015 12月 25th
本文的讀者需要已經了解 基本的 Git 操作和開發流程。
在我們開發完分支後,一般分支上會有很多 commit —— 少不了諸如 “fix typo”, “sth wrong in the previous commit” 之類的 commit。在合併到主幹的時候,往往這類 commit 顯得臃腫多餘。為了方便別人做 code review,我們希望合併一些不必要的 commit 使我們的分支顯得乾淨一目了然,也方便管理。有 3 種方式可以做到。
使用 GitHub / GitLab 的 Webhooks 進行網站自動化部署
2015 1月 19th
老早就想寫這個話題了,今天正好有機會研究了一下 git 的自動化部署。最終做到的效果就是,每當有新的 commit push 到 master 分支的時候,就自動在測試/生產服務器上進行 git pull 拉取最新的代碼,免去了程序猿兼職運維 ssh 上去拉代碼部署的重複性工作。我們也要 Agile development 不是?什麼敏捷開發啊,極限編程啊,快速迭代啊,持續集成啊,精益創業啊,口號怎麼高端怎麼來,最後就是寫了個自動化腳本……
將代碼庫從 SVN 遷移至 Git 並保留所有 commit 記錄
2014 5月 15th
公司內部原本使用 SVN 進行版本控制,但隨着 Github 的流行我個人的代碼管理習慣逐漸轉變。雖然公司項目並非開源,SVN 所具有的標準 trunk / branches / tags 結構完全夠用,使用 Git 仍然有如下優勢:
- 類似 GitHub 的 GitLab 免費管理工具。將代碼託管在自己內部服務器上的同時,提供了優美的 web 界面,圖形化分支結構,更直觀的代碼審查,統計、issue 系統、wiki 等功能全面集成。
- 更方便主程做 code review,控制代碼質量。創建主倉庫,多人開發時使用 fork 模式,每個人擁有自己獨立的 repo,獨立的 trunk / branches,最後發送 pull request 進行代碼合併。
- commit 和 push 更快。體現在 push 到遠程倉庫時 Git 會先對所有需要上傳的文件進行 zip 打包壓縮,然後一次性傳輸,在遠程服務器解壓,全部自動完成。而 SVN 則是一個一個文件地上傳,代碼是純文本,總體積並不大,但是大量零碎的小文件頻繁建立網絡連接造成延遲。這在升級第三方的庫或者框架時,成千上萬的文件更新更加讓人難以忍受。
- hook 可以更方便做自動化部署。當然這個 SVN 也有。
權衡後我決定花時間進行代碼倉庫的遷移。代碼遷移並非簡單地創建 Git repo 把當前項目代碼一次性 commit 過去就夠了,因為 SVN 中存有長年累月的 commit 歷史記錄,丟失歷史記錄將對今後追溯 debug 造成非常大的麻煩,所以如何保留 commit 記錄就是遷移的關鍵。
在 Android 上使用 Unblock Youku 觀看國內視頻
2014 4月 17th
國內的優酷、土豆、搜狐、愛奇藝等網站上的很多正版影視資源屏蔽了海外 IP,僅限中國大陸用戶觀看。為了解除地域限制,很多海外華人使用 Unblock Youku 瀏覽器插件,iOS 設備則可以 設定 PAC 代理,而現在使用安卓平板和手機的用戶通過 Drony 也可以 Unblock Youku 了。
在 iPad 上使用 Unblock Youku 觀看大陸網站影片
2012 12月 9th
由於版權等方面的原因,優酷土豆等網站上的很多視頻僅限中國大陸用戶觀看,這對身處國外的華人來說很不便。Unblock Youku 是我之前介紹的一個 Chrome 瀏覽器擴展程序,可以用來解除地域限制,使得海外用戶也能訪問國內的視頻網站觀看電影劇集。隨着蘋果 iPad 平板電腦等設備的普及,使用 iOS 設備觀看大陸影片的需求越來越多,而這些設備上是無法使用 Unblock Youku 插件的。為了解決這個問題,我們可以設置瀏覽器的 proxy 代理。Unblock Youku 目前實驗性地提供了一個代理自動配置 PAC 文件,非常簡單方便。
約定優於配置——軟件開發的簡約原則
2012 9月 15th
工作快滿 1 年了。在剛從 CUHK 畢業的時候,我還滿懷悲壯地表示在中文大學飽受摧殘,各種 assignments projects 所寫的代碼已經超過了整個在武大的四年。而現在,wc -l 顯示的數字已經可以讓我十分蛋定,這一年的代碼量已經超過了過去所有學生時代的總和。回過頭來看一年前寫的代碼,真是慘不忍睹,恨不得把當時的自己拉出去暴打一頓。確實走了很多彎路,但我也因此收穫頗豐。
感觸之一就是怎樣編寫漂亮整潔的代碼。我曾經說過,我是個完美主義者,寫博客的時候我要檢查以防出現錯別字,寫代碼的時候我會特別注意變量命名是否規範,甚至代碼縮進是否對齊。這大概已經屬於強迫症的治療範圍了。在現實項目開發中,整潔漂亮 意味着用最少的代碼,實現完整的業務功能,同時代碼是易於理解的。然而隨着時間流逝代碼不斷被修改,系統設計的整體結構則逐漸衰弱。編碼從嚴謹的工程墮落為隨性地胡亂砍劈。不重構,軟件就會慢慢腐爛。這一切是如何發生的呢?
Ngnix 配置完美支持 WordPress Super Cache 插件
2012 9月 1st
WordPress 大概是這個星球上使用得最多的博客程序了,甚至很多資訊、社區等非博客網站也在使用 WordPress。據統計,在全球排名 100 萬以內的網站中,約有 14.7% 是利用 WordPress 程序搭建。令人震驚的是,維護整個 WordPress 運營和升級的團隊核心成員,不足 20 人。大量的志願者在為這個生態系統貢獻精美的主題、實用的插件。
然而,為了保證靈活的可擴展性,Wordpress 犧牲了性能,它因為速度低下而廣受詬病,很多空間商也為此頭疼 —— 當訪問量很大的時候,臃腫的 WordPress 站點消耗了服務器太多CPU和內存資源。我曾經總結過提高網站性能的方法,其中最有效的手段就是靜態化了。
使用 WP Super Cache 插件可以幫助 WordPress 網站實現頁面靜態化,可惜的是 supercache 默認沒有提供對 Ngnix 服務器的支持。
VPS 防止 SSH 暴力登錄嘗試攻擊
2012 8月 22nd
VPS 屏蔽掃描網站的 IP
2012 8月 17th
前段時間博客經常性地無法訪問,網站宕機。SSH 上去看進程,發現大量 php-fpm 佔用系統資源,查看服務器的 Nginx 日誌,就知道發生了什麼事情。個別 IP “友情”為我的站點掃描漏洞,瞬時並發連接很大。我知道大家也沒什麼惡意,只是用黑客工具比較興奮,拿 www.lovelucy.info 練練手而已嘛。但是博主很窮,小站搭建在一個配置並不高的免費 VPS 上,折騰不起,壓力很大,結果一不小心讓各位搞成 DoS 拒絕服務攻擊了,真是慚愧。