sudo lsof -i :80 # checks port 80
git remove remote branch
一般來說想要刪除遠端的 branch 直接使用:
但是可能你無意中把 branch 名稱與 tag 名稱設定相同,當你想要刪除時 git 會給你錯誤訊息:
這時候如果你還是想要刪除遠端的 branch 請改下指令:
相關連結
Deleting remote branches
git push REMOTE_NAME BRANCH_NAME
sample: git push origin dev
但是可能你無意中把 branch 名稱與 tag 名稱設定相同,當你想要刪除時 git 會給你錯誤訊息:
error: dst refspec BRANCH_NAME matches more than one
error: failed to push some refs to 'https://github.com/IskenHuang/xxxxxxxxxxxxx.git'
這時候如果你還是想要刪除遠端的 branch 請改下指令:
git push REMOTE_NAME :refs/heads/BRANCH_NAME
sample: git push origin :refs/heads/dev
相關連結
Deleting remote branches
sailsjs router regex
相信很多人都有在 sailsjs 的 config/router.js 中看到下面這段,這問題就是當 controller 與 static directory 衝突時 router 該如何處理,官方其實在下面這段有寫出解決方案,但實際使用上沒辦法正常運作。
如果想要達到相同的效果可以使用另一個方式如下:
但這時可能會遇上另一個問題,原本 sailsjs 的 router 設計為 :controller/:action,所以如果是想要把所有 '/XXXXXXXXX' 都對應到 UserController 的 action,就沒辦法在 controller 的 req 拿到 req.param('action') 取得要對應的 action,因此可以將上方這段修改為:
修改完後只要是連到 '/XXXXXXXXX' 都會被指向 UserController 的 profile action,而 UserController.profile 的 req.param('action') 就會是 XXXXXXXXX 的名稱,如果是連到 '/logo.png' 等連結會被指向 static directory,這邊也建議如果要使用這種方式請把 profile 改為 index,由 index 來做處理,畢竟 profile 這字這樣使用不太恰當。
如果是想要只開放幾個特殊狀況才進行上面這段可以修改為:
這樣修改後會發現只有 '/profile', '/page' 會指向 UserController 的 profile,而 req.param('action') 也會拿到 profile/ page,其他的如果沒有 static file 就會被導到 404。
-------- update 2013-11-11 -------
其實這段 regex 跟原本的寫出來會略有不同,真正原因是 sails 會對這段 regex 作些調整:
相關連結
sailsjs document - router
// What about the ever-popular "vanity URLs" aka URL slugs?
// (you remember doing this with `mod_rewrite` in PHP)
//
// This is where you want to set up root-relative dynamic routes like:
// http://yourwebsite.com/twinkletoezz993
//
// You still want to allow requests through to the static assets,
// So we need to set up this route to allow URLs through that have a trailing ".":
// (e.g. your javascript, CSS, and image files)
'get /*(^.*)': 'UserController.profile'
如果想要達到相同的效果可以使用另一個方式如下:
'get /[^.?]+?': 'UserController.profile'
但這時可能會遇上另一個問題,原本 sailsjs 的 router 設計為 :controller/:action,所以如果是想要把所有 '/XXXXXXXXX' 都對應到 UserController 的 action,就沒辦法在 controller 的 req 拿到 req.param('action') 取得要對應的 action,因此可以將上方這段修改為:
'get /:action([^.?]+?)': 'UserController.profile'
修改完後只要是連到 '/XXXXXXXXX' 都會被指向 UserController 的 profile action,而 UserController.profile 的 req.param('action') 就會是 XXXXXXXXX 的名稱,如果是連到 '/logo.png' 等連結會被指向 static directory,這邊也建議如果要使用這種方式請把 profile 改為 index,由 index 來做處理,畢竟 profile 這字這樣使用不太恰當。
如果是想要只開放幾個特殊狀況才進行上面這段可以修改為:
'get /:action(profile|page)': 'UserController.profile'
這樣修改後會發現只有 '/profile', '/page' 會指向 UserController 的 profile,而 req.param('action') 也會拿到 profile/ page,其他的如果沒有 static file 就會被導到 404。
-------- update 2013-11-11 -------
其實這段 regex 跟原本的寫出來會略有不同,真正原因是 sails 會對這段 regex 作些調整:
如果你寫 /:action(*) 會被 sails 轉譯為「^\/(?:( YOUR_REGEX ))\/?$」,而「*」會被改為「.*」也就是所有字元都可以,這部份目前看起來是直接將轉譯後的 regex 對應到 expressjs 的 router。-------- update 2013-11-11 -------
相關連結
sailsjs document - router
search code in git commit history
常常寫到一半看到過去的一段 code,內心的 OS 不禁嘶吼「WTF 怎麼會這樣寫」,這時候就只好回去找是哪一次 commit,但問題來了,每個 file commit 數量這麼多要怎樣找?還好 git 有提供查詢的功能(淚奔~~~)
如果只是要查詢專案目前的 source 可以使用下面這行,REGEX 就是你想查詢的條件,當然還有很多參數可以帶(請參考:http://git-scm.com/docs/git-grep)
如果是要收尋整個專案所有過去的 commit 可以使用下面這行,SEARCH_STRING 就是想要搜尋的字串,FILE_PATH 檔案的路徑,如果是想要搜尋整個專案可以使用「.」,詳細參數可參考:http://git-scm.com/docs/git-log
相關連結
http://git-scm.com/
如果只是要查詢專案目前的 source 可以使用下面這行,REGEX 就是你想查詢的條件,當然還有很多參數可以帶(請參考:http://git-scm.com/docs/git-grep)
git grep REGEX
如果是要收尋整個專案所有過去的 commit 可以使用下面這行,SEARCH_STRING 就是想要搜尋的字串,FILE_PATH 檔案的路徑,如果是想要搜尋整個專案可以使用「.」,詳細參數可參考:http://git-scm.com/docs/git-log
git log -S SEARCH_STRING FILE_PATH
相關連結
http://git-scm.com/
facebook page feeds
由於看到一些 feed 內容還不錯,但是每次從 RSS reader 看完後再手動儲存下來有點累(我習慣儲存在 google form),雖然每次作一次這種複製貼上的過程中可以再多看一眼,但久了還是會累(已經蒐集了700多筆後...)
Facebook 的 page 有提供 rss feed 給其他網站使用,其提供的型態有三種 AOTM, RSS2.0, JSON,使用方式如下:
最後面所帶的 id 就是 pageId,如果不知道 pageId 可以到下方連結查詢,只要把 url 中的 'AppStore' 至換成你的 page 名稱
以上已經完成了一大步,順利取得 Feed 來源,接來來就是快快樂樂使用 Google Apps Script 自動儲存到 google form 中 :)
相關連結
facebook developer
Google Apps Script
Facebook 的 page 有提供 rss feed 給其他網站使用,其提供的型態有三種 AOTM, RSS2.0, JSON,使用方式如下:
JSON https://www.facebook.com/feeds/page.php?format=json&id=246748395427671
ATOM https://www.facebook.com/feeds/page.php?format=atom10&id=246748395427671
RSS https://www.facebook.com/feeds/page.php?format=rss20&id=246748395427671
最後面所帶的 id 就是 pageId,如果不知道 pageId 可以到下方連結查詢,只要把 url 中的 'AppStore' 至換成你的 page 名稱
https://developers.facebook.com/tools/explorer/?method=GET&path=AppStore%2Ffeed
查詢結果會顯示 pageId 如下圖
以上已經完成了一大步,順利取得 Feed 來源,接來來就是快快樂樂使用 Google Apps Script 自動儲存到 google form 中 :)
相關連結
facebook developer
Google Apps Script
SlideNote new feature transition and themes
http response \ufeff
前幾天遇上從 server api 拿到的 response 會在第一個字元收到 \ufeff,jquery 的 ajax 會直接 fail,但直接看 response 會發現 status code 一樣是200,json 的內容也是正常,但 ajax 就是會變成 fail。
目前查詢到的資料來看,這是 utf8(BOM) 的問題, IDE 的編碼在儲存時如果編碼為 BOM 會在第一個字元插入\ufeff,而\ufeff這字元是個特殊的空白字元,一般的 IDE 會自動把這濾掉,所以你將 response 貼上 IDE 想要檢查問題出在哪一般也看不到,建議使用 vim 來看,會清楚的看到這字元,或者 chrome 的 inspect 也會發現如下圖的紅點:

其實這問題看起來真的跟使用的語言無關,似乎與 IDE 關係比較大,從 google 搜尋看起來就是跟網路相關的語言都容易碰上(如下圖)

Nodejs 的 V8 會自動將這字元濾掉,除非你連續寫了兩個\ufeff,不然不會發生,其他語言可能就要注意一下,在發生這問題請不要懷疑自己寫的 code,應該先去查 IDE 的編碼,而這問題也不會是前端的問題,由 server side 處理更為恰當。
目前查詢到的資料來看,這是 utf8(BOM) 的問題, IDE 的編碼在儲存時如果編碼為 BOM 會在第一個字元插入\ufeff,而\ufeff這字元是個特殊的空白字元,一般的 IDE 會自動把這濾掉,所以你將 response 貼上 IDE 想要檢查問題出在哪一般也看不到,建議使用 vim 來看,會清楚的看到這字元,或者 chrome 的 inspect 也會發現如下圖的紅點:

其實這問題看起來真的跟使用的語言無關,似乎與 IDE 關係比較大,從 google 搜尋看起來就是跟網路相關的語言都容易碰上(如下圖)

Nodejs 的 V8 會自動將這字元濾掉,除非你連續寫了兩個\ufeff,不然不會發生,其他語言可能就要注意一下,在發生這問題請不要懷疑自己寫的 code,應該先去查 IDE 的編碼,而這問題也不會是前端的問題,由 server side 處理更為恰當。