Changes between Initial Version and Version 1 of TenMax-MEMO


Ignore:
Timestamp:
Jun 22, 2018, 5:37:33 PM (6 years ago)
Author:
jazz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TenMax-MEMO

    v1 v1  
     1= Mac 設定 =
     2== 開發環境設定 ==
     3{{{
     4#install xcode command tool
     5xcode-select --install
     6# check
     7xcode-select -p
     8# install home-brew
     9ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
     10# check brew
     11brew doctor
     12brew update
     13# install develop environment
     14brew install ansible
     15brew install gradle
     16brew cask install java
     17brew cask install intellij-idea-ce ## community edition
     18# install JSON toolkits
     19brew install jq
     20brew install npm
     21npm install json2csv -g
     22# install azure-cli
     23npm install azure-cli -g
     24}}}
     25
     26== 辦公環境設定 ==
     27{{{
     28# install firefox
     29brew cask install firefox-zh-tw
     30# 編輯器
     31brew cask install sublime-text
     32# Markdown 筆記用:
     33brew cask install macdown
     34# Markdown 寫文件用:
     35brew cask install gitbook-editor
     36brew cask install pandoc
     37# 群組溝通用:slack
     38brew cask install slack
     39# 資料分析用
     40brew cask install tableau-public ## 拿來分析一些 CSV 用
     41# MS Office 日常文書用
     42brew cask install microsoft-office
     43}}}
     44
     45== 網路環境設定 ==
     46
     47* Mac 無線網路設定
     48[[File:Funp_wifi.png|480px]]
     49* Android 手機無線網路設定
     50[[File:Android_WiFi.png|240px]]
     51
     52== 鍵盤快速鍵 ==
     53
     54* 首先,認識一下選單上的鍵盤符號對應:
     55[[File:hotkeys.png|400px]]
     56
     57== 終端機設定 ==
     58
     59* 一開始覺得很奇怪,為何用 `screen` 有顏色,不用就沒有顏色。
     60* 原因是預設的 `TERM` 不支援,需改為 `xterm-256color` 才行。
     61* [[File:mac_terminal_xterm.png|600px]]
     62* 修改後,查詢 `$TERM` 環境變數應該會看到:
     63{{{
     64~$ echo $TERM
     65xterm-256color
     66}}}
     67
     68= Azure =
     69
     70* 若要使用命令列建立與管理 Azure 資源,您必須具備以下條件:
     71** 有 Azure 帳戶 (免費試用版) - 註冊 Azure - https://azure.microsoft.com/zh-tw/
     72** 安裝 Azure CLI - https://azure.microsoft.com/zh-tw/documentation/articles/xplat-cli-install/
     73** 登入使用您帳戶的相關 Azure 資源 - https://azure.microsoft.com/zh-tw/documentation/articles/xplat-cli-connect/
     74
     75== Azure CLI 安裝 ==
     76=== Mac OS X ===
     77
     78{{{
     79brew install npm
     80npm install azure-cli -g
     81}}}
     82
     83* 雖然 homebrew 裡也有 `azure-cli`,但版本比較舊,建議用 npm 的版本。
     84{{{
     85~$ brew info azure-cli
     86azure-cli: stable 0.10.6 (bottled), HEAD
     87}}}
     88
     89=== Docker ===
     90
     91* Docker Hub - https://hub.docker.com/r/microsoft/azure-cli/
     92* azure-cli 的 github - https://github.com/azure/azure-xplat-cli
     93* 在 Docker主機中,執行:
     94
     95{{{
     96docker run -it microsoft/azure-cli
     97}}}
     98
     99=== 小技巧 ===
     100
     101* 在 Docker 主機中,有 `azure.completion.sh` 可以讓 Azure CLI 提供指令的建議。若有需要,請在 Mac OS 的家目錄建立 .bashrc 與 .bash_profile 檔案,並 `source 路徑/azure.completion.sh`
     102* 如果懶得從 docker image 裡面取得 azure.completion.sh 可至以下 gist 路徑取得:
     103** https://gist.githubusercontent.com/jazzwang/4397a4a13507fef8d94010a49337d120/raw/b7dc8b8086198d01c92f52cb5bd363d3811e0b40/azure.completion.sh
     104* 以下是我的設定,供參考:
     105** `.bash_profile`
     106{{{
     107# ~/.profile: executed by the command interpreter for login shells.
     108# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
     109# exists.
     110# see /usr/share/doc/bash/examples/startup-files for examples.
     111# the files are located in the bash-doc package.
     112
     113# the default umask is set in /etc/profile; for setting the umask
     114# for ssh logins, install and configure the libpam-umask package.
     115#umask 022
     116
     117# if running bash
     118if [ -n "$BASH_VERSION" ]; then
     119    # include .bashrc if it exists
     120    if [ -f "$HOME/.bashrc" ]; then
     121        . "$HOME/.bashrc"
     122    fi
     123fi
     124
     125# set PATH so it includes user's private bin if it exists
     126if [ -d "$HOME/bin" ] ; then
     127    PATH="$HOME/bin:$PATH"
     128fi
     129}}}
     130** `.bashrc`
     131{{{
     132## for Intellij IDEA
     133export JAVA_HOME="$(/usr/libexec/java_home)"
     134## for terminal
     135export CLICOLOR=1
     136export LSCOLORS="Gxfxcxdxbxegedabagacad"
     137alias ls='ls -GFh'
     138source /usr/local/etc/bash_completion.d/git-completion.bash
     139source /usr/local/etc/bash_completion.d/azure.completion.sh
     140source /usr/local/etc/bash_completion.d/docker
     141source /usr/local/etc/bash_completion.d/brew
     142source /usr/local/etc/bash_completion.d/brew-cask
     143source /usr/local/etc/bash_completion.d/gradle
     144}}}
     145
     146== Azure 術語與觀念 ==
     147
     148* Azure 建立和處理資源的部署模型有二種: 資源管理員和傳統
     149* 傳統的文件入口:https://azure.microsoft.com/zh-tw/documentation/articles/virtual-machines-command-line-tools/
     150* Microsoft 建議大部分的新部署使用 Resource Manager model。(常看到的 ARM 縮寫,指的就是 Azure Resource Manager)
     151* 資源管理員文件入口:https://azure.microsoft.com/zh-tw/documentation/articles/xplat-cli-azure-resource-manager/
     152
     153{| class="wikitable sortable"
     154|-
     155! 縮寫 !! 全文 !! 說明
     156|-
     157| ASM ||  ||
     158|-
     159| ARM || Azure Resource Manager || Azure 資源管理員
     160|-
     161|  || Resource Group ||
     162|}
     163
     164== Azure CLI 操作與管理 ==
     165
     166* 安裝好 Azure CLI 之後,您就能從命令列使用者介面 (Bash、終端機及命令提示字元等) 中執行 azure 命令。例如,若要執行 [說明] 命令,請輸入下列命令:
     167
     168{{{
     169azure help
     170}}}
     171
     172* 若要查看您所安裝的 Azure CLI 版本,請輸入下列命令:
     173
     174{{{
     175azure --version
     176}}}
     177
     178* 參考 https://azure.microsoft.com/zh-tw/documentation/articles/xplat-cli-connect/ 完成帳號綁定
     179* 因為使用的是 0.9.10 以後的版本,所以直接使用 `azure login`
     180
     181=== azure login ===
     182
     183{{{
     184~# azure --version
     1850.9.19 (node: 4.2.4)
     186root@azure:~# azure login
     187info:    Executing command login
     188-info:    To sign in, use a web browser to open the page https://aka.ms/devicelogin. Enter the code G*K*N*D*L to authenticate.
     189/info:    Added subscription Free Trial
     190info:    Setting subscription "Free Trial" as default
     191+
     192info:    login command OK
     193}}}
     194
     195=== azure account ===
     196
     197* 檢查 account 狀態
     198
     199{{{
     200~# azure account list
     201info:    Executing command account list
     202data:    Name        Id                                    Current  State 
     203data:    ----------  ------------------------------------  -------  -------
     204data:    Free Trial  ####################################  true     Enabled
     205info:    account list command OK
     206}}}
     207
     208=== azure config ===
     209
     210* 由於預設是 ASM 模式,可以透過 `azure config mode arm` 改成 ARM 模式。
     211{{{
     212azure config mode arm
     213}}}
     214
     215=== azure location ===
     216
     217* 查詢目前 Azure 的機房位置
     218{{{
     219~$ azure location list
     220info:    Executing command location list
     221warn:    The "location list" commands is changed to list subscription's locations. For old information, use "provider list or show" commands.
     222info:    Getting locations...
     223data:    Name                Display Name         Latitude  Longitude
     224data:    ------------------  -------------------  --------  ---------
     225data:    eastasia            East Asia            22.267    114.188 
     226data:    southeastasia       Southeast Asia       1.283     103.833 
     227data:    centralus           Central US           41.5908   -93.6208
     228data:    eastus              East US              37.3719   -79.8164
     229data:    eastus2             East US 2            36.6681   -78.3889
     230data:    westus              West US              37.783    -122.417
     231data:    northcentralus      North Central US     41.8819   -87.6278
     232data:    southcentralus      South Central US     29.4167   -98.5   
     233data:    northeurope         North Europe         53.3478   -6.2597 
     234data:    westeurope          West Europe          52.3667   4.9     
     235data:    japanwest           Japan West           34.6939   135.5022
     236data:    japaneast           Japan East           35.68     139.77   
     237data:    brazilsouth         Brazil South         -23.55    -46.633 
     238data:    australiaeast       Australia East       -33.86    151.2094
     239data:    australiasoutheast  Australia Southeast  -37.8136  144.9631
     240data:    southindia          South India          12.9822   80.1636 
     241data:    centralindia        Central India        18.5822   73.9197 
     242data:    westindia           West India           19.088    72.868   
     243data:    canadacentral       Canada Central       43.653    -79.383 
     244data:    canadaeast          Canada East          46.817    -71.217 
     245info:    location list command OK
     246}}}
     247
     248=== azure vm ===
     249
     250==== azure vm list ====
     251
     252* 檢查 vm 狀態
     253
     254{{{
     255~$ azure vm list
     256info:    Executing command vm list
     257+ Getting virtual machines                                                     
     258data:    ResourceGroupName    Name                    ProvisioningState  PowerState      Location       Size         
     259data:    -------------------  ----------------------  -----------------  --------------  -------------  --------------
     260info:    vm list command OK
     261}}}
     262
     263==== azure vm image list ====
     264
     265* 查詢作業系統範本 Image
     266{{{
     267~$ azure vm image list
     268info:    Executing command vm image list
     269Location: southeastasia
     270Publisher: OpenLogic       
     271+ Getting virtual machine image offers (Publisher: "OpenLogic" Location:"southeastasia")
     272data:    Publisher  Offer       Sku  OS     Version       Location       Urn                                 
     273data:    ---------  ----------  ---  -----  ------------  -------------  -------------------------------------
     274data:    OpenLogic  CentOS      6.5  Linux  6.5.201501    southeastasia  OpenLogic:CentOS:6.5:6.5.201501     
     275data:    OpenLogic  CentOS      6.5  Linux  6.5.201503    southeastasia  OpenLogic:CentOS:6.5:6.5.201503     
     276data:    OpenLogic  CentOS      6.5  Linux  6.5.201506    southeastasia  OpenLogic:CentOS:6.5:6.5.201506     
     277data:    OpenLogic  CentOS      6.5  Linux  6.5.20150904  southeastasia  OpenLogic:CentOS:6.5:6.5.20150904   
     278data:    OpenLogic  CentOS      6.5  Linux  6.5.20160309  southeastasia  OpenLogic:CentOS:6.5:6.5.20160309   
     279data:    OpenLogic  CentOS      6.6  Linux  6.6.201501    southeastasia  OpenLogic:CentOS:6.6:6.6.201501     
     280data:    OpenLogic  CentOS      6.6  Linux  6.6.201503    southeastasia  OpenLogic:CentOS:6.6:6.6.201503     
     281data:    OpenLogic  CentOS      6.6  Linux  6.6.201506    southeastasia  OpenLogic:CentOS:6.6:6.6.201506     
     282data:    OpenLogic  CentOS      6.6  Linux  6.6.20150706  southeastasia  OpenLogic:CentOS:6.6:6.6.20150706   
     283data:    OpenLogic  CentOS      6.6  Linux  6.6.20150731  southeastasia  OpenLogic:CentOS:6.6:6.6.20150731   
     284data:    OpenLogic  CentOS      6.6  Linux  6.6.20160309  southeastasia  OpenLogic:CentOS:6.6:6.6.20160309   
     285data:    OpenLogic  CentOS      6.7  Linux  6.7.20150815  southeastasia  OpenLogic:CentOS:6.7:6.7.20150815   
     286data:    OpenLogic  CentOS      6.7  Linux  6.7.20160303  southeastasia  OpenLogic:CentOS:6.7:6.7.20160303   
     287data:    OpenLogic  CentOS      6.7  Linux  6.7.20160310  southeastasia  OpenLogic:CentOS:6.7:6.7.20160310   
     288data:    OpenLogic  CentOS      6.8  Linux  6.8.20160620  southeastasia  OpenLogic:CentOS:6.8:6.8.20160620   
     289data:    OpenLogic  CentOS      7.0  Linux  7.0.20150128  southeastasia  OpenLogic:CentOS:7.0:7.0.20150128   
     290data:    OpenLogic  CentOS      7.0  Linux  7.0.20150325  southeastasia  OpenLogic:CentOS:7.0:7.0.20150325   
     291data:    OpenLogic  CentOS      7.0  Linux  7.0.20150605  southeastasia  OpenLogic:CentOS:7.0:7.0.20150605   
     292data:    OpenLogic  CentOS      7.0  Linux  7.0.20150904  southeastasia  OpenLogic:CentOS:7.0:7.0.20150904   
     293data:    OpenLogic  CentOS      7.0  Linux  7.0.20160309  southeastasia  OpenLogic:CentOS:7.0:7.0.20160309   
     294data:    OpenLogic  CentOS      7.1  Linux  7.1.20150410  southeastasia  OpenLogic:CentOS:7.1:7.1.20150410   
     295data:    OpenLogic  CentOS      7.1  Linux  7.1.20150605  southeastasia  OpenLogic:CentOS:7.1:7.1.20150605   
     296data:    OpenLogic  CentOS      7.1  Linux  7.1.20150731  southeastasia  OpenLogic:CentOS:7.1:7.1.20150731   
     297data:    OpenLogic  CentOS      7.1  Linux  7.1.20160308  southeastasia  OpenLogic:CentOS:7.1:7.1.20160308   
     298data:    OpenLogic  CentOS      7.2  Linux  7.2.20160303  southeastasia  OpenLogic:CentOS:7.2:7.2.20160303   
     299data:    OpenLogic  CentOS      7.2  Linux  7.2.20160308  southeastasia  OpenLogic:CentOS:7.2:7.2.20160308   
     300data:    OpenLogic  CentOS      7.2  Linux  7.2.20160620  southeastasia  OpenLogic:CentOS:7.2:7.2.20160620   
     301data:    OpenLogic  CentOS-HPC  6.5  Linux  6.5.20160408  southeastasia  OpenLogic:CentOS-HPC:6.5:6.5.20160408
     302data:    OpenLogic  CentOS-HPC  7.1  Linux  7.1.20160408  southeastasia  OpenLogic:CentOS-HPC:7.1:7.1.20160408
     303info:    vm image list command OK
     304}}}
     305
     306==== azure vm sizes ====
     307
     308* 查詢 VM 大小種類
     309** 所需參數:`--location` 或 `--vm-name`
     310{{{
     311~$ azure vm sizes --location southeastasia
     312}}}
     313
     314==== azure vm quick-create ====
     315
     316* 快速建立新的 VM
     317{{{
     318Usage: vm quick-create [options] <resource-group> <name> <location> <os-type> <image-urn> <admin-username> <admin-password>
     319}}}
     320{| class="wikitable"
     321|-
     322! 變數 !! 可用選項
     323|-
     324| location || 詳見 `azure location list`
     325|-
     326| os-type || <ul><li>Windows</li><li>Linux</li></ul>
     327|-
     328| image-urn || 詳見 `azure vm image list`
     329|}
     330* 範例:
     331{{{
     332~$ azure vm quick-create cassandra cassandra12v2 southeastasia Linux OpenLogic:CentOS:7.2:latest jazz TenM@x1234
     333}}}
     334
     335==== azure vm create ====
     336
     337* 手動建立 VM
     338{{{
     339Usage: vm create [options] <resource-group> <name> <location> <os-type>
     340}}}
     341* 範例:使用現成 OS 碟,附掛到新的 VM
     342{{{
     343-f, --nic-name <nic-name> ## 可使用相同 resource group 的現有 NIC (必須先 detach)
     344}}}
     345{{{
     346~$ azure vm create -g cassandra -n test -l southeastasia -y Linux \
     347   --vm-size Standard_DS3_v2 \
     348   --os-disk-vhd https://cli17432911802090392708.blob.core.windows.net/vhds/cli7ee1f2e662a40b58-os-1467009098723.vhd \
     349   -f testnic}}}
     350
     351=== azure storage ===
     352* 官方文件:[https://azure.microsoft.com/zh-tw/documentation/articles/storage-azure-cli/ 使用 Azure CLI 搭配 Azure 儲存體]
     353* `azure storage account list` 可以查詢目前建立的 storage account
     354{{{
     355~$ azure storage account list
     356info:    Executing command storage account list
     357+ Getting storage accounts                                                     
     358data:    Name                      Type          Location       Resource Group     
     359data:    ------------------------  ------------  -------------  -------------------
     360data:    tenmaxsglog               Standard_LRS  southeastasia  tenmax-sg-data     
     361info:    storage account list command OK
     362}}}
     363* `azure storage account keys list <name>` 可以查詢 storage account key
     364{{{
     365~$ azure storage account keys list tenmaxsglog
     366info:    Executing command storage account keys list
     367Resource group name: tenmax-sg-data
     368+ Getting storage account keys                                                 
     369data:    Primary:   ***********
     370data:    Secondary: ***********
     371info:    storage account keys list command OK
     372}}}
     373
     374== AzureKit 安裝與使用 ==
     375
     376* pop 寫的 command line 工具
     377** 原始碼: http://github.com/tenmax/azurekit
     378* Mac OS X 安裝
     379{{{
     380~$ brew tap tenmax/azure
     381~$ brew install azurekit
     382}}}
     383
     384=== 設定檔 ===
     385
     386* azurekit 包含 `azurecat`, `azuresink`, `azuresas` 三個小工具
     387* 設定檔放在 `${HOME}/.azure/storagekeys`, 內容包括:
     388{{{
     389DefaultEndpointsProtocol=https;
     390AccountName=.........;
     391AccountKey=.......
     392}}}
     393
     394=== azurecat ===
     395
     396* A CLI tool to cat microsoft azure blob storage
     397* 直接 cat 遠端 Azure Blob Storage 的檔案
     398
     399=== azuresink ===
     400
     401* A CLI tool to pipe standard in to microsoft azure blob storage
     402* 將本機檔案上傳到 Azure Blob Storage
     403
     404=== azuresas ===
     405
     406* 取得 Azure Blob Storage 的 sharing URL
     407
     408== GUI 界面 ==
     409
     410=== Microsoft Azure Storage Explorer ===
     411
     412* http://storageexplorer.com/
     413* 注意:需打開 MAC 安全性設定,才能進行安裝。
     414* [[File:Mac_Security_Setting.png|400px]]
     415
     416=== Cyberduck ===
     417
     418* Mac OS X 安裝
     419{{{
     420brew install Caskroom/cask/cyberduck
     421}}}
     422
     423== 其他 CLI 工具 ==
     424
     425* https://www.npmjs.com/package/azure-storage-cmd
     426* https://github.com/bfaludi/azrcmd
     427
     428= Cassandra =
     429== 內部文件 ==
     430== 自學教材 ==
     431
     432* [https://www.safaribooksonline.com/library/view/cassandra-administration/9781782164203/ Cassandra Administration]
     433** by C Y Kan
     434** Publisher: Packt Publishing
     435** Release Date: November 2013
     436** ISBN: 9781782164203
     437** Running time: 2:51:40
     438
     439== 維運技巧 ==
     440
     441=== 加機器 ===
     442
     443=== 跨資料中心 ===
     444
     445* 跨資料中心時,Cassandra Driver 最好加上 Compression 的設定
     446* [參考] https://datastax.github.io/java-driver/2.1.7/features/compression/
     447[[File:after_compression.png|400px]]
     448
     449= Ansible =
     450== Ansible 快速入門 ==
     451* sysadmincasts 三小時入門
     452** [https://sysadmincasts.com/episodes/43-19-minutes-with-ansible-part-1-4  Episode #43 - 19 Minutes With Ansible (Part 1/4)]
     453** [https://sysadmincasts.com/episodes/45-learning-ansible-with-vagrant-part-2-4 Episode #45 - Learning Ansible with Vagrant (Part 2/4)]
     454** [https://sysadmincasts.com/episodes/46-configuration-management-with-ansible-part-3-4 Episode #46 - Configuration Management with Ansible (Part 3/4)]
     455** [https://sysadmincasts.com/episodes/47-zero-downtime-deployments-with-ansible-part-4-4 Episode #47 - Zero-downtime Deployments with Ansible (Part 4/4)]
     456
     457= Gradle =
     458
     459== 參考書目 ==
     460
     461* [http://storage.pardot.com/68052/1700/Building_and_Testing_with_Gradle.pdf 免費電子書(1) Building and Testing with Gradle]
     462* [http://storage.pardot.com/68052/1448/Gradle_Beyond_the_Basics.pdf 免費電子書(2) Gradle Beyond the Basics]
     463
     464== 安裝 gradle ==
     465
     466* Mac 安裝
     467{{{brew install gradle}}}
     468* Debian / Ubuntu 安裝
     469{{{apt-get -y install gradle}}}
     470* 習慣 bash completion 的可以額外下載 gradle 的自動命令補完,並加入對應的 `.bashrc` 設定
     471{{{
     472curl -L -s https://gist.github.com/nolanlawson/8694399/raw/gradle-tab-completion.bash -o /usr/local/etc/bash_completion.d/gradle
     473}}}
     474
     475== gradle init ==
     476
     477* 使用 `gradle init` 產生 gradle 專案目錄的範本
     478{{{
     479~$ mkdir -p gradle-sample
     480~$ cd gradle-sample
     481~/gradle-sample$ gradle init
     482:wrapper
     483:init
     484
     485BUILD SUCCESSFUL
     486
     487Total time: 2.419 secs
     488
     489This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.12/userguide/gradle_daemon.html
     490}}}
     491* `gradle init` 產生的目錄結構如下:
     492{{{
     493.
     494├── build.gradle
     495├── gradle
     496│   └── wrapper
     497│       ├── gradle-wrapper.jar
     498│       └── gradle-wrapper.properties
     499├── gradlew
     500├── gradlew.bat
     501└── settings.gradle
     502
     5032 directories, 6 files
     504}}}
     505* `gradle init` 支援產生不同的範本,包括:
     506** `gradle init --type basic`
     507** `gradle init --type groovy-library`
     508** `gradle init --type java-library`
     509** `gradle init --type pom`
     510** `gradle init --type scala-library`
     511
     512== gradle tasks ==
     513
     514* 可以用 `gradle tasks` 了解目前定義了哪些 task
     515{{{
     516:tasks
     517
     518------------------------------------------------------------
     519All tasks runnable from root project
     520------------------------------------------------------------
     521
     522Build Setup tasks
     523-----------------
     524init - Initializes a new Gradle build. [incubating]
     525wrapper - Generates Gradle wrapper files. [incubating]
     526
     527Help tasks
     528----------
     529buildEnvironment - Displays all buildscript dependencies declared in root project 'gradle-sample'.
     530components - Displays the components produced by root project 'gradle-sample'. [incubating]
     531dependencies - Displays all dependencies declared in root project 'gradle-sample'.
     532dependencyInsight - Displays the insight into a specific dependency in root project 'gradle-sample'.
     533help - Displays a help message.
     534model - Displays the configuration model of root project 'gradle-sample'. [incubating]
     535projects - Displays the sub-projects of root project 'gradle-sample'.
     536properties - Displays the properties of root project 'gradle-sample'.
     537tasks - Displays the tasks runnable from root project 'gradle-sample'.
     538
     539BUILD SUCCESSFUL
     540
     541Total time: 1.994 secs
     542
     543This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.12/userguide/gradle_daemon.html
     544}}}
     545
     546== gradle build ==
     547
     548* 編譯並產生 distribution
     549{{{gradle build}}}
     550
     551== gradle clean ==
     552
     553* 清除編譯好的 build
     554{{{gradle clean}}}
     555
     556== plugin: 'application' ==
     557=== gradle distZip ===
     558
     559* 產生 Release 用的 Zip 檔
     560{{{
     561~/git/tenmax-log-toolkit$ gradle distZip
     562:compileJava
     563Note: Some input files use or override a deprecated API.
     564Note: Recompile with -Xlint:deprecation for details.
     565Note: Some input files use unchecked or unsafe operations.
     566Note: Recompile with -Xlint:unchecked for details.
     567:processResources UP-TO-DATE
     568:classes
     569:jar
     570:elandbidStartScript
     571:elandproductStartScript
     572:elandreqStartScript
     573:elandreqoldStartScript
     574:imaxaggreStartScript
     575:pmaxaggreStartScript
     576:pmaxexportStartScript
     577:startScripts
     578:distZip
     579
     580BUILD SUCCESSFUL
     581
     582Total time: 7.461 secs
     583
     584This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.12/userguide/gradle_daemon.html
     585jazz@jazzbook ~/git/tenmax-log-toolkit$ ls build/distributions/tenmax-log-toolkit.zip
     586build/distributions/tenmax-log-toolkit.zip
     587}}}
     588
     589== plugin: 'spring-boot' ==
     590
     591=== gradle bootRun ===
     592
     593{{{
     594Application tasks
     595-----------------
     596bootRun - Run the project with support for auto-detecting main class and reloading static resources
     597}}}
     598
     599== 學習資源 ==
     600
     601* http://projects.spring.io/spring-boot/
     602
     603= Others =
     604
     605== brew ==
     606
     607{| class="wikitable"
     608|-
     609! 指令 !! 描述 !! 範例
     610|-
     611| `brew doctor` || 檢查 brew 系統是否有潛在問題 || {{{~$ brew doctor
     612Please note that these warnings are just used to help the Homebrew maintainers
     613with debugging if you file an issue. If everything you use Homebrew for is
     614working fine: please don't worry and just ignore them. Thanks!
     615
     616Warning: Your Homebrew is outdated.
     617You haven't updated for at least 24 hours. This is a long time in brewland!
     618To update Homebrew, run `brew update`.}}}
     619|-
     620| `brew desc` || 顯示套件的簡單描述 || {{{~$ brew desc mysql
     621mysql: Open source relational database management system}}}
     622|-
     623| `brew info` || 顯示套件的詳細描述 || {{{~$ brew info mysql
     624mysql: stable 5.7.12 (bottled)
     625Open source relational database management system
     626https://dev.mysql.com/doc/refman/5.7/en/
     627Conflicts with: mariadb, mariadb-connector-c, mysql-cluster, mysql-connector-c, percona-server
     628Not installed
     629From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb
     630==> Dependencies
     631Build: cmake ✘
     632Required: openssl ✔
     633==> Options
     634--with-archive-storage-engine
     635        Compile with the ARCHIVE storage engine enabled
     636--with-blackhole-storage-engine
     637        Compile with the BLACKHOLE storage engine enabled
     638--with-debug
     639        Build with debug support
     640--with-embedded
     641        Build the embedded server
     642--with-local-infile
     643        Build with local infile loading support
     644--with-test
     645        Build with unit tests
     646==> Caveats
     647We've installed your MySQL database without a root password. To secure it run:
     648    mysql_secure_installation
     649
     650To connect run:
     651    mysql -uroot
     652
     653To have launchd start mysql now and restart at login:
     654  brew services start mysql
     655Or, if you don't want/need a background service you can just run:
     656  mysql.server start}}}
     657|}
     658
     659=== 建立自己的 Cask ===
     660
     661* 參考文件:https://github.com/caskroom/homebrew-cask/blob/master/doc/development/adding_a_cask.md
     662* STEP 1:
     663{{{
     664~$ brew cask create microsoft-azure-storage-explorer
     665}}}
     666* STEP 2: 照著修改內容 - 可以先看一下[https://github.com/caskroom/homebrew-cask/pulls 別人的 Pull Request 常被檢討什麼]
     667{{{
     668cask 'microsoft-azure-storage-explorer' do
     669  version :latest
     670  sha256 :no_check
     671
     672  url 'https://go.microsoft.com/fwlink/?LinkId=708342'
     673  name 'Microsoft Azure Storage Explorer'
     674  homepage 'http://storageexplorer.com/'
     675  license :gratis
     676
     677  app 'Microsoft Azure Storage Explorer.app'
     678end
     679}}}
     680* STEP 3: 檢驗是否可以正常下載
     681{{{
     682~$ brew cask audit --download microsoft-azure-storage-explorer
     683}}}
     684* STEP 4: 檢驗語法是否正確
     685{{{
     686~$ cd "$(brew --repository)"/Library/Taps/caskroom/homebrew-cask
     687homebrew-cask$ brew cask style --fix Casks/microsoft-azure-storage-explorer.rb
     688}}}
     689* STEP 5: 檢查安裝與反安裝是否正確
     690{{{
     691homebrew-cask$ brew cask install microsoft-azure-storage-explorer
     692homebrew-cask$ brew cask uninstall microsoft-azure-storage-explorer
     693}}}
     694* STEP 6: 建立新的 branch 分支
     695{{{
     696homebrew-cask$ git checkout -b microsoft-azure-storage-explorer
     697}}}
     698* STEP 7: 加入新的 Cask Formulae
     699{{{
     700homebrew-cask$ git add Casks/microsoft-azure-storage-explorer.rb
     701homebrew-cask$ git diff --cached
     702homebrew-cask$ git commit -v
     703}}}
     704* STEP 8: 送上自己的 gitlab 用來提交 Pull Request ( PS. 必須先 fork homebrew-cask 到自己的 github 帳號下 )
     705{{{
     706homebrew-cask$ git push https://github.com/jazzwang/homebrew-cask microsoft-azure-storage-explorer
     707}}}
     708* STEP 9: 等 homebrew-cask 的 Travis CI 通過,若有錯誤,就還要反覆修改並重新提交內容。
     709
     710=== 更新自己的 Cask ===
     711
     712* 參考: https://github.com/caskroom/homebrew-cask/blob/master/CONTRIBUTING.md#updating-a-cask
     713* STEP 1: 安裝 `cask-repair`
     714{{{
     715# install and setup script - only needed once
     716brew install vitorgalvao/tiny-scripts/cask-repair
     717cask-repair --help
     718
     719# fork homebrew-cask to your account - only needed once
     720cd "$(brew --repository)/Library/Taps/caskroom/homebrew-cask/Casks"
     721hub fork
     722cask-repair --pull origin --push jazzwang microsoft-azure-storage-explorer
     723}}}
     724
     725{{{
     726cask-repair microsoft-azure-storage-explorer
     727}}}
     728* STEP 2: 照著問題回答,例如修改版號、修改下載網址等
     729{{{
     730Type the new version (or leave blank to use the current one)
     731> 0.8.0
     732Paste the new URL (or leave blank to use the current one)
     733> http://go.microsoft.com/fwlink/?LinkId=708342
     734}}}
     735
     736=== Homebrew Tap ===
     737
     738* 舉凡官方不收或是有 license 疑慮的 formula 變可透過 Homebrew Tap 的方式來自已管理。
     739* [參考] https://blog.gasol.tw/make-your-own-homebrew/
     740
     741== Tableau ==
     742
     743* 為了看 DSP 與 DMP 的 Daily Report,可以使用 Tableau 來觀察 CSV 檔的內容。
     744* Mac 安裝
     745{{{
     746brew install Caskroom/cask/tableau-public
     747}}}
     748
     749== Hadoop ==
     750
     751* 在 Mac 上安裝單機版(local mode)的 Hadoop 還蠻簡單的,只需要透過 `brew` 就可以裝好。
     752* Mac 安裝
     753{{{
     754brew install hadoop
     755}}}
     756
     757== Hive ==
     758
     759* 在 Mac 上安裝單機版(local mode)的 Hive 還蠻簡單的,只需要透過 `brew` 就可以裝好。
     760* Mac 安裝
     761{{{
     762brew install hive
     763}}}
     764
     765== Spark ==
     766
     767* 在 Mac 上安裝單機版(local mode)的 Apache Spark 還蠻簡單的,只需要透過 `brew` 就可以裝好。
     768* Mac 安裝
     769{{{
     770brew install apache-spark
     771}}}
     772
     773== Gist ==
     774
     775* http://defunkt.io/gist/
     776* https://github.com/defunkt/gist
     777* RubyGems 安裝:
     778{{{
     779gem install gist
     780}}}
     781* Mac 安裝
     782{{{
     783brew install gist
     784}}}
     785* Debian / Ubuntu 安裝
     786{{{
     787apt-get -y install gist
     788}}}
     789* 使用
     790** 登入 - `gist --login`
     791** 上傳單一檔案 - `gist file1`
     792** 上傳多個檔案 - `gist file1 file2`
     793** 上傳 STDIN 到指定檔名 - `指令 | gist -f "檔名"`
     794** 複製 gist URL 到剪貼簿 - `指令 | gist -c`
     795
     796== Bash ==
     797
     798* 偶爾會用到一些 Bash 的色塊 COLOR
     799* 參考文件:
     800** http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
     801** https://wiki.archlinux.org/index.php/Bash/Prompt_customization
     802* TLDP 的測試腳本可以在 gist 取得
     803** https://gist.github.com/jazzwang/55203a9f33386e0e567328fb86ebf7db
     804
     805== Spring Boot ==
     806
     807* 假設 project 名稱是 tenmax-audience-library ,主程式的 package 是 io.tenmax
     808* 要切換 Spring Profile 可以在環境變數中,設定 `SPRING_PROFILES_ACTIVE` 為特定的 profile 名稱
     809** [參考] http://stackoverflow.com/questions/23367507/how-to-pass-system-property-to-gradle-task
     810{{{
     811export SPRING_PROFILES_ACTIVE=dev
     812}}}
     813* 若要切換 log4j 的 level 一般要在 `application.yml` 先改好
     814** [參考] http://stackoverflow.com/questions/20485059/spring-boot-how-can-i-set-the-logging-level-with-application-properties
     815** 因為有使用 gradle 的 `application` plugin,參考產生出來的 `bin/tenmax-audience-library` start script,發現可以在環境變數中,設定 `TENMAX_AUDIENCE_LIBRARY_OPTS`
     816{{{
     817export TENMAX_AUDIENCE_LIBRARY_OPTS="-Dlogging.level.io.tenmax=DEBUG"
     818}}}
     819
     820== Intellij IDEA CE ==
     821
     822* MAC OS X 安裝
     823{{{
     824brew cask install intellij-idea-ce
     825}}}
     826* 設定用 command line 指令 `idea` 就可以啟動 IDEA
     827[[File:Idea command line launcher.png|400px]]
     828
     829== gitbook ==
     830
     831* MAC OS X 安裝
     832* 編輯器
     833{{{
     834brew cask install gitbook-editor
     835}}}
     836* 用戶端程式
     837{{{
     838npm -g install gitbook-cli
     839}}}
     840
     841== mailx ==
     842
     843* CentOS 安裝
     844{{{
     845sudo yum -y install mailx postfix
     846}}}
     847* 複製 Mac OS 家目錄下 `Library/Application\ Support/Firefox/Profiles/*.default` 的 `cert*.db` 與 `key*.db` 放到 Linux 家目錄的 `.cert` 底下
     848* 設定帳號資訊於 `.mailrc`
     849{{{
     850[jazz@tenmax-sg-spark1 ~]$ cat .mailrc
     851set smtp-use-starttls
     852set nss-config-dir=/home/jazz/.cert
     853set ssl-verify=ignore
     854set smtp=smtp://outlook-apaccentral.office365.com:587
     855set smtp-auth=login
     856set smtp-auth-user=jazz@funp.com
     857set smtp-auth-password=$PASSWORD
     858set from="jazz@tenmax.io(Jazz Wang)"
     859}}}
     860* 使用 `mail -s "信件標題" 收件者信箱 < 信件內容 ` 即可用命令列寄信
     861* [參考] http://www.systutorials.com/1411/sending-email-from-mailx-command-in-linux-using-gmails-smtp/
     862* [參考] http://www.binarytides.com/linux-mailx-command/
     863
     864== jq ==
     865
     866{{{
     867azurecat -b 4096 -z $URL 
     868| jq -c '. | select( .bidRequest.domain=="setn.com")
     869| { underbid: .bidResponse.campUnderIds, winCampaign: .bidResponse.campaignId ,
     870space: .bidRequest.spaceId , time: .dateTime }'
     871}}}