在 Linux 的終端機裡,大部份都可以使用 Shift+PageUp/PageDown 來往前翻,但在 iTerm2 裡,不是這樣子的,得按下 Command + fn + ↑ 才可以。
若需要查詢其他的熱鍵,可以進 iTerm2 的 Preference > Shortcuts 來察看。
參考資料:How to scroll the terminal emulator window in smaller steps using the keyboard?
Just thinking more…
在 Linux 的終端機裡,大部份都可以使用 Shift+PageUp/PageDown 來往前翻,但在 iTerm2 裡,不是這樣子的,得按下 Command + fn + ↑ 才可以。
若需要查詢其他的熱鍵,可以進 iTerm2 的 Preference > Shortcuts 來察看。
參考資料:How to scroll the terminal emulator window in smaller steps using the keyboard?
許久沒用 Chromium,這次安裝發現很不一樣。
前幾天開始,跟 OneDrive 相關的部份都怪怪的,於是昨天重新開機,想說應該就好了吧。但事與願違,OneDrive 持續的顯示載入中,到後來就不理我了,游標移到圖示上,顯示 MacOS 的彩虹轉圈圈。
試著砍 Process,也重開機了幾次,都不行,後來找到這篇:修正 Mac 上的 OneDrive 同步處理問題 。裏面提到好幾種方法。我是使用了裏面重置 OneDrive 的方法。
OneDrive 應用程式目錄下藏有一個重製的命令:
執行的時候,會跳出一個終端機視窗顯示他執行的指令,執行完,關閉即可。
再重新執行 OneDrive 來設定即可,選擇位置時,記得選取前一個 OneDrive 同步處理的位置。 這樣一來,如果您的檔案沒有變更就不會再次下載。
Apache / Nginx 很常用到的情境就是同個 Port 會有不同的站台,這時會使用到 VirtualHost 。
那 HAProxy 可以這樣做嗎?利用 Google 找了一下,發現是可以,主要是使用 ACL 的設定。
關鍵的設定是寫在 frontend 裡 (設定摘錄自 HAProxy – route by domain name | Sean McGary)
frontend http-in
bind *:80
# Define hosts
acl host_bacon req.hdr(host) -i ilovebacon.com
acl host_milkshakes req.hdr(host) -i bobsmilkshakes.com
## figure out which one to use
use_backend bacon_cluster if host_bacon
use_backend milshake_cluster if host_milkshakes
利用 acl + hdr(host) 來判斷 HTTP header 裡的 Host ,接著再使用 use_backend … if … 來決定使用哪一個 backend。
查到以後,我試了好一陣子,都試不出來,後來才搞懂,當使用這個來判斷 header 時,mode 必須要改為 http,如果 mode 是 tcp,那麼是沒作用的。同理,當要用到 https 上時,也會不行,因為連線的內容被加密,HAProxy 無法解讀內容,也就無法得知 header。
HAProxy 的 backend 裡可以改寫 request 的 header,方法如下
backend ocp-apps-http
mode http
http-request del-header Host
http-request set-header Host petclinic.apps.example.com
server node1 petclinic.apps.example.com:80
透過這個,就可以達到類似 reverse proxy 的效果。
今天試下來,大致對 Apache / Nginx / HAProxy 的定位有了一定程度的了解。HAProxy 有兩個 mode:tcp / http,tcp 適用於 SSL pass-through 跟純 TCP 傳輸的情況,這時是由 backend 來處理 SSL 憑證;http 可以視為跟 Apache / Nginx 相似的情況,也可以掛 SSL 憑證。
簡單的說,Apache / Nginx 並不能完全取代 HAProxy,反之亦然。
GameToGo 是個很方便的產品,讓你可以在 MBP 上使用 Windows 10 ,又可以省掉許多麻煩。
本來是打算買一個的,後來上網找了一下,找到這篇:在 Mac 下,如何安裝 BootCamp WIN10 到外接硬碟(製作自己的 GameToGo) ,看完,評估了好一會兒之後,就決定來照著做一次。手邊雖然有外接裝置,但沒有夠快的,所以就下單買了一個外接 SSD。
文章裡前面提到 MacOS 的磁碟分割軟體不好用,建議用其他的磁碟分割軟體來做。自己試了一次,發現真的不行。後來我用的方法是這樣:
diskutil partitionDisk disk2 GPT exFAT windows 250Gi exFAT data R解說一下 diskutil 那行:
diskutil list 來看。分割完以後,後續的基本上就照做就可以。安裝完畢,視窗並不會關閉,就只是一片黑,這時候只要關閉視窗即可。
然後重新開機 MacOS,等到重開機的時候,會遇到安全性問題,這部份就要照 MacBook 用隨身碟執行 Windows 10:Windows To Go、WinToUSB 裡的「安全性設定不允許此 Mac 使用外部啟用磁碟」這一節去做。
這時候就可以繼續安裝 Windows 的步驟了,最後再裝上驅動程式即可。
在推特上看到 @WanCW 的推文,才知道 git config 有 includeIf ,所以來研究一下怎麼用。
先看 git config 的說明:https://git-scm.com/docs/git-config ,用法蠻簡單的。
這邊先做假設情境
為了避免使用者名稱、email 跟 SSH key 混用,這時候 git config 該怎麼設定呢?
首先在 $HOME 下建立 .gitconfig.d 目錄,在裡面放入 company.inc 與 side.inc,這兩個檔案的內容,在後面會提到。
先編輯 $HOME/.gitconfig
; include if $GIT_DIR is under /home/user/CompanyProjects/ [includeIf “gitdir:/home/user/CompanyProjects/"] path = /home/user/.gitconfig.d/company.inc ; include if $GIT_DIR is under /home/user/SideProjects/ [includeIf “gitdir:/home/user/SideProjects/"] path = /home/user/.gitconfig.d/side.inc
再來是 company.inc 與 side.inc
; $HOME/.gitconfig.d/company.inc [user] email = user@company.com name = user(company) [core] sshcommand=ssh -i /home/user/.ssh/company.pem
; $HOME/.gitconfig.d/side.inc [user] email = user@example.com name = user
在這樣設定之後,當切換到 $HOME/CompanyProjects 目錄下任一個專案目錄時,git 會使用 company.inc 裡的設定;切換到 $HOME/SideProjects 目錄下任一個專案目錄時,git 會使用 side.inc 裡的設定。
那也可以針對個別專案去設定,假設 $HOME/CompanyProjects/ProjectA 目錄會用到不一樣的,那就在 .gitconfig 加入
[includeIf “gitdir:~/CompanyProjects/ProjectA/“] path = ~/.gitconfig.d/projecta.inc
然後在 $HOME/.gitconfig.d 下新增 projecta.inc 即可。
node 是有一個 path 的 package,但這個 package 會依賴 process 來取得平台環境,以決定要用 win32 或是 posix 來處理路徑。
但我其實只是要簡單的取得父路徑跟從路徑取出檔案或目錄名稱,不需要這樣麻煩。上網找到這篇:Javascript functions for basename and dirname 。它的實作是使用 regular expression 來處理,所以傳回的並不是單純的字串,而是一個陣列 RegExMatchArray 。參考 MDN 的 String.prototype.match() 來做調整,簡單的說,陣列的第一個元素就是處理的結果,所以只要先判斷傳回值是否為 null ,然後再傳回第一個元素即可。
// Typescript
/**
* 取得父路徑
*/
export function dirname(path: string): string {
let newPath = '';
// 找符合 '/aaa/bbb/ccc/' 的字串
const regExMatchArray = path.match(/.*\//);
// 沒有找到,傳回 '/'
if (regExMatchArray === null ) {
newPath = '/';
}
else {
// 有找到
newPath = regExMatchArray[0];
// 看最後字元是否為 '/',是的話,就移除。
if (newPath.endsWith('/')) {
newPath = newPath.substring(0, newPath.length - 1);
}
// 最後結果的長度為0,加上 '/'
if (newPath.length === 0) {
newPath = '/';
}
}
return newPath;
}
/**
* 取得檔名或目錄名
*/
export function basename(path: string): string {
// 把 '/' (含)之前的字元都替換成空字串
return path.replace(/.*\//, '');
}
前幾天用 android studio 的 vim mode 打字打到一半,發現 Touchbar 上的 ESC 不見了,靠北,啊這樣是要怎麼打字打下去? 找了一下,在 macos – Esc button from touchbar has disappeared – Ask Different 找到解法,用
sudo pkill TouchBarServer
就可以找回失落的 ESC
在那個時間點,有上推特分享,推友跟我分享了不少方法:
有點不好意思的是,這些我都還沒試過,先記下來,以免日後再次遇到。
gitlab 升級到 13.0.5 以後,發現有這問題,原本以為是 gitlab-ce 問題,下次升級就解決了。但是今天升級到 13.0.6 以後,並沒有解決。 利用瀏覽器的開發者工具去查看,發現有個請求是回傳 404,仔細看他網址裡,有 %2F
https://host/user/gitlab-ce-commit-info-bug/-/refs/master/logs_tree/folder_1%2Ffolder_2?format=json&offset=0
手動把 %2F 改為 / 以後,就可以拿到資料。
利用 “gitlab-ce “refs/master” “%2F” 404gitlab-ce “refs/master” “%2F” 404” 這幾個關鍵字在 gitlab issue 209941 找到線索,是 Apache 問題。
Apache 要在 virtualhost 裡加上 AllowEncodedSlashes NoDecode
但我這樣試了以後,發現還是不行。後來看了 Apache 文件,知道除了 NoDecode 之外,還可以設定為 On:AllowEncodedSlashes On
於是這樣就可以成功顯示了。
但是為了安全性問題 (Apache 文件不建議這樣設定),再去找了一下,看為什麼會這樣。
後來在 StackOverflow 上找到解答,除了要改 AllowEncodedSlashes 之外,還要改 mod_proxy ProxyPass ,在後面加上 nocanon 即可。
範例
AllowEncodedSlashes NoDecode <Location /example/> ProxyPass http://anotherserver:8080/example/ nocanon </Location>
閱讀 指令式的網路速度測試工具 iPerf3 ,揪出網路頻寬真實的一面 以後做的小摘錄。
簡單說用法,因為是要測試內部網路的網路速度,所以要兩台電腦。一台執行
iperf3 -s
一台執行
iperf3 -c <server_ip>
這樣就可以了。也有公用的伺服器可以測,這樣就要一台電腦就行 (用 ipef3 -c <server_ip>),亞洲區只有兩台,一台在中亞(哈薩克),一台在印尼,要注意,使用公用伺服器的話,測出來的速度並不是網路內部電腦間的速度,而是電腦到Router到外部伺服器的速度。