前言:

在 Terminal 環境下,兩個檔案要進行差異比對,通常我們會使用系統內建的 diff 指令,效果如下:

內建的 diff 指令比對檔案差異

diff指令僅僅是將檔案差異處以上下對照呈現,並不會以顏色標示差異處,需要我們自己很傷眼的來回掃描比對才知道差異在哪裡,這樣的呈現效果不是那麼清楚。

讓我們來試試看,如果將檔案差異處以左右對照呈現的方式,並且將差異處標記上顏色,那是不是更一目了然了呢!
使用 icdiff 指令比對檔案差異

漂亮!差異處有加上顏色果然清楚多了!要達到這樣的效果,只需要改用 icdiff 這一套工具即可。

來看看 icdiff 官方是怎麼介紹的:

improved colored diff

效果如同我們上面所看到的,在檔案差異處會用顏色標記,一目了然的比對兩者的差異,找起問題容易多了。

其中各種顏色代表的意義如下:

  • 「綠色」表示「新增」。
  • 「紅色」表示「刪除」。

安裝方法:

OS X 可以直接使用 Homebrew 來安裝:

$brew install icdiff

由於 icdiff 是一個 python 開發的程式,也可以直接下載檔案來執行,請參考 GitHub 上面的說明。

使用方法:

如何比較兩個檔案差異:

$icdiff <file_1> <file_2>

備註:我們也可以將內建的 diff 指令改用 icdiff 取代。

如何搭配 git 使用:

$git difftool --extcmd icdiff

也可以有更精簡的 git 用法:

$git icdiff

只需要設定 git difftool path 指向 git-icdiff 檔案即可。

icdiff 設定為 git 預設比對差異工具:

已經習慣 git 預設的 git diff 指令了嗎?別擔心,我們可以設定 git 預設使用這一套來做差異比對,讓我們可以沿用原本熟悉的 git diff 指令,同時享用 icdiff 清楚的比對結果:

$git diff

該如何讓 $git diff 預設使用 icdiff,設定方法如下:

  1. .gitconfig 設定

    [diff]
        # 使用 icdiff 來取代 git 內建的 diff
        external = ~/bin/git-diff-wrapper.sh
    
  2. 建立 mkdir ~/bin/ 目錄

  3. 建立 ~/bin/git-diff-wrapper.sh 檔案,加入以下內容:

    #!/bin/bash
    icdiff $2 $5
    
  4. chmod 777 ~/bin/git-diff-wrapper.sh 開啟執行權限

  5. 完成!趕緊來使用 $git diff 看看吧

參考資料:

Bobo內心旁白:「為了愛護您的靈魂之窗,請趕緊改用 icdiff 來比對檔案差異吧。」

先說一下升級後明顯有感覺的部分:

  • 中文字體變好看! (使用新的中文字體-蘋方)
  • 畫面切換更流暢 (支援 Metal 繪圖 API)
  • 備忘錄變得更好用
  • 畫面最上方的狀態列可以隱藏
  • Mission Control 不會將同類型程式群組化
  • 幾乎是無痛升級:Sublime Text, Atom, Sketch, VirtualBox, SourceTree, Sequel Pro… 都正常

升級後受影響的 Web Developer 吃飯工具:

  1. Homebrew
  2. Vagrant
  3. PhpStorm (重新安裝 JRE 即可)
  4. XtraFinder (暫時無解)
  5. Asepsis (暫時無解)

HomebrewVagrant 以下附上解法。

Homebrew problems on OS X 10.11

升級 MAC OS X 10.11 (EI Capitan) 後,執行 brew update 時發生錯誤:

1
2
3
4
5
6
7
8
9
$ brew update
Error: The /usr/local directory is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. Some versions of the
"InstantOn" component of Airfoil are known to do this.
You should probably change the ownership and permissions of /usr/local
back to your user account.
sudo chown -R $(whoami):admin /usr/local

原因

由於 Mac OS X 10.11 引入了「System Integrity Protection (SIP)」而導致 /usr/System 以及 /bin 等目錄被保護無法寫入(即使用 root 權限也不行),因此造成 Homebrew 發生無寫入權限錯誤。

解法

已存在 /usr/local 目錄時:

1
sudo chown -R $(whoami):admin /usr/local

不存在 /usr/local 目錄時:

解法是關閉 SIP,方法如下:

  • 重開機按 cmd+r 進入恢復模式 -> 工具程式 -> 安全設定->
    取消勾選 「System Integrity Protection」
  • 回到 OS X 桌面,開啟 Terminal 並執行:
1
sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown -R $(whoami):admin /usr/local

Vagrant problems on OS X 10.11

看到 Jeffrey Way 在 Twitter 上面喊:

This Vagrant quirk is the only thing I ran into with my El Capitan update.

解法

Fix for Vagrant/Homestead - El Capitan

參考資料:

Bobo內心旁白:「升級一定有風險,升級前應詳閱公開說明書~ 特別是這次有令人又愛又恨 SIP…」

搬家源由

Blogger 不好用嗎?

不會啊,已經使用好幾年了,
有內建很棒的後台,詳細的 Dashboard、WYSIWYG 線上編輯器、版型範本也有多種選擇,當然你想要使用 GA 或是 Google Adsense 等 Google 自家服務更是輕鬆容易,連相簿也整合好 google+ 了,甚至聽說還送你 SEO 優勢(鄉野傳說?)
而且輕輕鬆鬆註冊個帳號就可以使用囉。

Why 改用 Hexo?

Hexo 沒有很厲害的後台,還需要自己 host server,雖然相較於 Blogger 沒那麼方便,不過卻多了更多練習的機會,以下給自己整理了幾個搬家的理由:

  • Hexo 使用 markdown 語法來寫文章,藉此讓自己更熟悉這個語法。
    • 雖然之前也可以藉由 StackEdit => Blogger 但是體驗沒那麼流暢
  • 用 markdown 呈現技術文章的排版效果比較好,讓自己更專心寫些技術文章。
  • 給自己找個理由實際摸摸 Node.js。
  • 方便備份,所有的文章單純就是文字檔,完全不需要依賴資料庫。
  • 最近用 Hexo 似乎比較潮!? 社群內好多朋友都改用了。

其實除了 Hexo 之外,類似的選擇還評估了 jekyll、Ghost、Octopress,各有各個優缺點,Hexo 明顯的優勢在於 編譯速度快安裝設定超簡單,之後整理一下在來分享評估的小小心得。

搬家心路歷程小記

原先在 Blogger 前前後後寫了約1百多篇文章,雖然大多是學習過程的雜記,稱不上什麼技術文章,但總是個回憶,捨不得丟棄,因此希望可以有個搬家工具來打包舊文章。

備註:舊版 Blog 位置:http://bobo52310.blogspot.tw

Hexo 官方搬家教學:

官方貼心地提供搬家(migration)說明 https://hexo.io/docs/migration.html

目前有支援以下幾種來源:

  • RSS
  • Jekyll
  • Octopress
  • WordPress

但是沒有看到有支援 Blogger …

只好請 Google 來幫忙,找到一個看似可用的 npm 套件:hexo-migrator-blogger

實際測試後,僅僅噴了一些錯誤訊息,無法執行打包舊文章 @_@

1
2
3
4
5
6
7
boboMac :: blog.bobochen.com ‹master*› » hexo migrate blogger http://bobo52310.blogspot.tw/feeds/posts/default\?alt\=json\&max-results\=10000
Fetching...
blog.bobochen.com/node_modules/hexo-migrator-blogger/lib/migrate.js:25
var content = item.content['$t'];
^
TypeError: Cannot read property '$t' of undefined
at blog.bobochen.com/node_modules/hexo-migrator-blogger/lib/migrate.js:25:39

最後還是改用官方教學的 RSS 來源,才成功打包。

使用 RSS 來源方法雖然可行,但也不是完美,1百多篇僅成功匯出 25 篇…(到 2012.5)

而且圖片也無法轉換過來 @_@

有考慮乾脆從 blogger 後台匯出 xml

xml => web => hexo converter 或許也是一個方法~

參考資料