2018年4月5日 星期四

install gcloud SDK on Mac

在網站上下載自己版本的SDK:https://cloud.google.com/sdk/downloads?hl=zh-tw

解壓縮
# tar zxvf google-cloud-sdk-183.0.0-darwin-x86_64.tar.gz

進目錄後執行安裝檔
# cd google-cloud-sdk
# ./install.sh


遇到下列錯誤訊息:
File "/google-cloud-sdk/bin/bootstrapping/install.py", line 214, in <module>
    main()
  File "/google-cloud-sdk/bin/bootstrapping/install.py", line 189, in main
    Prompts(pargs.usage_reporting)
  File "/google-cloud-sdk/bin/bootstrapping/install.py", line 113, in Prompts
    scope=properties.Scope.INSTALLATION)
  File "/google-cloud-sdk/lib/googlecloudsdk/core/properties.py", line 1512, in PersistProperty
    raise MissingInstallationConfig()

重新安裝python
# brew reinstall python

it's OK~ 


另外也可以嘗試以下指令的安裝方式
curl https://sdk.cloud.google.com | bash

2018年4月1日 星期日

讓mac有漂亮的 Terminal

  1. 安裝 iTerm2
  2. 修改 iTerm2 的 color scheme
  3. 安裝 powerline font
  4. 安裝 zsh
  5. 安裝 oh-my-zsh
  6. 安裝 zsh theme: powerlevel9k
  7. 設定 powerlevel9k

安裝方式:
brew cask instal iterm2
安裝好以後,打開 iTerm2 檢查 Report Terminal Type 的設定,設定路徑:
Preferences => Profiles => Terminal => Report Terminal Type
設為 xterm-256color,等等在 terminal 才能看得到漂亮的顏色

修改 iTerm2 的 color scheme

這步驟很重要,預設的很醜,想要自己的 command line 看起來賞心悅目就絕對要換掉預設的
設定路徑:Preferences => Profiles => Colors => Color Presets...






內建已經幾個選則可以用,不過幾乎都很難看,iTerm2 Color Schemes 有超多可以選,先把整個 repo 下載到自己的電腦後,然後 import 到 iTerm2:






剛才下載下來的 iTerm2-Color-Schemes 有很多個資料夾,從 schemes 資料夾裡面選一個喜歡的 color scheme






這邊要注意的是點選了檔案 import 以後並不會生效,還要再去 color preset 點選你剛 import 的 scheme 才會生效
我自己是用 Tomorrow Night Eighties,優點是對比不會太強比較不刺眼,螢幕盯久了不會不舒服,顏色飽和度也適中,看起來質感比較好。

安裝 powerline font

因為我們要用的 theme 會用到很多的特殊 icon,所以 iTerm2 選用的字型必需要支援這種特殊 icon font。這類型的字體統稱為 powerline font(另外還有加強版支援更多特殊 icon 的叫的 nerd font)
沒有安裝的話畫面會長這樣,遇到 icon 會變框框問號

支援 powerline 的字型很多,我推薦 Sauce Code Pro Nerd Font Complete安裝方式推薦直接用 brew 安裝比較快又好管理
安裝指令:
brew cask install font-sourcecodepro-nerd-font
如果想要裝別的,brew 上面也有很多字型可以挑。
關鍵字是 nerd
brew cask search nerd


裝完後,記得修改 iTerm2 字型設定,改成 SauceCodePro Nerd Font 或你自己下載的字型
設定路徑:Preferences => Profiles => Text => Change Font (參考下圖)




修改 iTerm2 字型設定

安裝 zsh:

zsh 是個取代 bash 的強大 shell,比 bash 好用幾百倍。這篇文章介紹的 command line 設定一定要跑在 zsh。沒用過的一定要試一下
一樣用 homebrew 安裝:
brew install zsh

安裝 oh-my-zsh

上一步裝完 zsh 後,就可以開始調整我們想要的 command line 外觀設定了,但是原始的 zsh 因為設定太難搞,所以多年前剛出現的時候沒有受到太多關注,直到有人寫了一套叫 oh-my-zsh 的 framework 來幫助大家使用 zsh,zsh 才火了起來。現在幾乎所有 zsh 好用的工具都有支援 oh-my-zsh,所以當然是要裝這東西
安裝指令:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
註:這會直接執行 oh-my-zsh 的 install.sh有疑慮的人可以先稍微研究一下 oh-my-zsh github 上的 install.sh,覺得放心再執行
執行完以後如果沒有出現什麼錯誤訊息就代表成功了,同時會發現多了 oh-my-zsh 的資料夾 ~/.oh-my-zsh

重頭戲!!安裝 zsh theme powerlevel9k

剛裝完 oh-my-zsh 以後,預設是使用內建的 theme robbyrussell,多了 git 資訊,顏色也看起來比原生 bash 好一些:






不過 oh-my-zsh 內建很多 theme,在它的 github wiki 上有很多截圖可以參考
切換內建的 theme 很簡單,直接修改你的 ~/.zshrc ,把原本 ZSH_THEME=”robbyrussell 改成你想要的:
ZSH_THEME=”agnoster” # 試試看把 robbyrussell 改成 agnoster
任何的 zsh 設定修改過後,還要執行以下指令才會生效
exec $SHELL
 
powerlevel9k 不只是像上面的示範圖顯示一些基本的資訊,還可以做到很屌的事情,比如像下圖那樣,顯示 WiFi 訊號強度、筆電電池電力、CPU loading、system free memory 等等資訊在 command line





圖片擷取自 powerlevel9k github

powerlevel9k 安裝方式:

  1. powerlevel9k 不是 oh-my-zsh 內建的 theme ,必須另外下載
指令:
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
2. 編輯你的 ~/.zshrc ,把 ZSH_THEME 設為 powerlevel9k,並設定要顯示哪些東西在 command line 上:
ZSH_THEME="powerlevel9k/powerlevel9k" 
# command line 左邊想顯示的內容
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir) # <= left prompt 設了 "dir"
# command line 右邊想顯示的內容
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(time) # <= right prompt 設了 "time"
POWERLEVEL9K_RAM_ELEMENTS="ram_free"
上面的例子我們把左邊設了一個 dir,右邊設了 time,代表左邊想顯示當前資料夾路徑,右邊顯示時間
設定完後 command line 看起來會像這樣 (記得執行 exec $SHELL,設定才會生效):

當你進入了一個沒有寫入權限的資料夾時還可以給你提醒:
# 加上 "dir_writable"
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir dir_writable vcs)

我自己習慣左側的設定放一些常用基本資訊
右邊放一些好用但不是每次下指令都要看的東西
command line 右邊的設定放在 POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
例如顯示上一個指令的 return code:
# 加上 "status" 顯示上一個指令的 return code:
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status time)
如果指令沒出錯,linux return code 為 0 時會有個綠色小勾勾:

如果打了錯誤指令會出現相對應的 return code,並且用紅色底色提醒你

還可以顯示目前電腦的 free memory:
# 加上 ram,顯示目前的 free memory
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status ram time)
 
加上 CPU load average:
# 加上 load 顯示 CPU 忙碌程度
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status ram load time)
 
顯示電量:
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(battery)
 
示範了不少,但還有非常非常多東西可以用,請參考這個列表自己玩玩看https://github.com/bhilburn/powerlevel9k#available-prompt-segments
不過有些東西中看不中用,放太多東西也會讓 command line 反應變慢,試了各種設定一陣子後,只留下了一些我覺得比較有用的,給大家參考:
# 左側
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir dir_writable vcs vi_mode)
# 右側
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs history ram load time)
# 若當前登入的帳號為你的帳號 xxx,就不用特別顯示出來
DEFAULT_USER="xxx"




ref : https://medium.com/statementdog-engineering/prettify-your-zsh-command-line-prompt-3ca2acc967f

2018年3月18日 星期日

grep指令搜尋結果 顏色設定

grep 對搜尋的字做顏色標註,只要用預設參數即可,可在 ~/.bashrc 寫個 alias 就好,如下:
# vim ~/.bashrc
並在該檔案中加入底下這行:
alias grep='grep --color'
儲存檔案離開後,重開terminal即可

2018年1月26日 星期五

uboot sf 指令 教學

uboot中如果有支援 spi/qspi flash, 就可以使用 sf 的 erase, read, write 等指令操作 spi flash


sf read: 讀取 flash資料到記憶體
sf write: 寫入記憶體資料到flash
sf erase:刪除指定位置,指定長度的 flash 内容, 刪除後内容全為 1


使用說明
sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus and chip select
sf read addr offset len - read 'len' bytes starting at 'offset' to memory at 'addr'
sf write addr offset len - write 'len' bytes from memor at 'addr' to flash at 'offset'
sf erase offset [+]len    - erase 'len' bytes from 'offset' + 'len' round up 'len' to block size
sf update addr offset len - erase and write 'len' bytes from memory at 'addr' to flash at 'offset'


使用範例
sf probe
在使用sf read sf write之前,一定要先用sf probe


sf write 0x20000000 0x0 0x10
把記憶體中0x2000 0000的資料, 寫入flash的0x0, 寫入資料長度為0x10, (注意:flash的位置以及寫入長度度最單位位是Byte)



sf read 0x20000000 0x10000 0x10
把flash位置0x10000, 長度为0x10的資料, 寫入到記憶體0x20000000, (注意:flash的位置以及寫入長度度最單位是Byte)


sf erase 0x0 0x10000
刪除flash的0x0, 長度為0x10000的資料, 刪除是以erase block為單位, offset和len參數必須要跟erase block對齊的。





驗證讀寫結果
可以结合uboot md命令, 可以用md查看記憶體中的資料
md.l 0x20000000 0x10
印出記憶體位置0x20000000, 長度為0x10的資料

2017年12月28日 星期四

install vim-go(on Mac OSX)

install vim-go 的插件
# curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# git clone https://github.com/fatih/vim-go.git ~/.vim/plugged/vim-go

編輯 .vimrc
# vim ~/.vimrc

在 vimrc 中加入下列三行後儲存離開
call plug#begin()
Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }
call plug#end()
 
最後再用 vim 去看 golang 的 code 就可以發現已經安裝好了
 
note: 注意 vim 的版本,若安裝失敗有可能是 vim 版本太舊請先更新
      # brew upgrade vim
 
 
使用方式:
 
執行,直接在 vim 底下輸入“:GoRun“ 即可看到結果.
 
編譯,在 vim 底下輸入“:GoBuild”,若成功可以看到 “vim-go: [build] SUCCESS”
  



reference:

https://github.com/fatih/vim-go-tutorial

http://www.evanlin.com/switch-ide-to-vim/

http://fealonelei.github.io/2015/08/18/MAC-Vim-IDE-for-Go(lang).html

2017年12月13日 星期三

golang mkdir permission error

今天在Linux底下執行golang的os.Mkdir發生資料夾權限問題,透過ls -al去看才發現資料夾的權限跟我在os.Mkdir所設定的權限完全不一樣.後來發現建立資料夾時除了需要指定權限外,也需要加上系統的Umask.

原code:
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. err := os.MkdirAll("gotest/", 0777)
  8. if err != nil {
  9. panic(err)
  10. }
  11. } 
 
修正後:
  1. package main

  2. import (
  3. "fmt"
  4. "os"
  5. "syscall"
  6. )

  7. func main() {
  8.     mask := syscall.Umask(0)
  9.     defer syscall.Umask(mask)
  10.     err := os.MkdirAll("gotest/", 0777)
  11.     if err != nil {
  12.         panic(err)
  13.     }
  14. }
 

2017年11月16日 星期四

設定CentOS時間與NTP伺服器時間同步

將系統與NTP 的伺服器同步
設定步驟
1.以root 的身分登入
2. 執行下面的指令安裝NTP
# yum install ntp
3. 啟動服務
#chkconfig ntpd on
4. 設定系統和 time.stdtime.gov.tw 同步 (以time.stdtime.gov.tw為例)
#ntpdate time.stdtime.gov.tw
5.啟動ntp
# service ntpd start
6.可以執行下面的指令確定目前系統的時間
#date