我的 command prompt 設定

2018-01-29 更新

適用於 macOS 10.13.2

來一點嘻嘻哈哈的配色吧!

PS1="\[\033[1;31m\]\t\[\033[0m\] \[\033[1;33m\]\u\[\033[0m\] \[\033[1;32m\]\h\[\033[0m\] \[\033[1;34m\]\w\[\033[0m\] 🦁 "

但建議還是把 emoji 拿掉,我在 iTerm2 換行會怪怪的

2015-07-13

因為買了新電腦,想把command prompt改得比較實用一點,發現自己完全忘記怎麼改了,再度驗證了考LPIC是沒有用的XD

Mac的個人command prompt檔案位置在 ~/.bash_profile
如果沒看到的話,自己打開隱藏檔,如果還是沒看到的話就自己nano一個新的

sudo nano ~/.bash_profile

重新讀取 .bash_profile 指令:

source ~/.bash_profile

目前的prompt:

export PS1=”[$(date +%k:%M:%S)] \[email protected]\h \w $”

範例顯示:

[ 1:55:58] [email protected] ~ $

總共有哪些指令要另外爬文找了,參考文獻裡面有

—參考文獻—
[1] How to reload .bash_profile from the command line? – http://stackoverflow.com/questions/4608187/how-to-reload-bash-profile-from-the-command-line
[2] How to suppress (or customize) Mac Terminal shell prompt – http://stackoverflow.com/questions/14416274/how-to-suppress-or-customize-mac-terminal-shell-prompt
[3] Bash Shell PS1: 10 Examples to Make Your Linux Prompt like Angelina Jolie – http://www.thegeekstuff.com/2008/09/bash-shell-ps1-10-examples-to-make-your-linux-prompt-like-angelina-jolie/
[4] Customize Your Shell & Command Prompt – http://blog.taylormcgann.com/tag/prompt-color/
[5] [Unix] 讓Bash增添色彩 與 多字元換行問題 – http://blog.xuite.net/sphjlc062218/thinking/63628944-%5BUnix%5D+%E8%AE%93Bash%E5%A2%9E%E6%B7%BB%E8%89%B2%E5%BD%A9+%E8%88%87+%E5%A4%9A%E5%AD%97%E5%85%83%E6%8F%9B%E8%A1%8C%E5%95%8F%E9%A1%8C

macOS 建置 golang 開發環境

現在是 2017-12-31,此方法依舊可成功。

流程如下:

  1. 安裝 Xcode command line tools
  2. 安裝 Homebrew
  3. 安裝 Golang
  4. 設定 GOPATH 環境變數
  5. 安裝 Visual Studio Code 及開發環境套件

1. 安裝 Xcode command line tools

為了使用 git command,要先安裝 Xcode command line tools:

$ xcode-select --install

他會問一些什麼同意條款之類的,同意就對了

2. 安裝 Homebrew

自從有了 Homebrew 幫我管理套件,人生省了非常多的時間在建置環境上面,因為我是重灌控(?)
到這個網址下載 Homebrew:https://brew.sh/
複製網頁裡的指令貼到 Terminal 即可

3. 安裝 Golang

確定裝完 Homebrew 之後,接下來就無痛安裝 golang

$ brew install go

4. 設定 GOPATH 環境變數

GOPATH 是所有 go 指令操作時的位置,修改個人環境變數檔案即可,我這邊用的是 nano,你可以用自己習慣的編輯器
Terminal 底下輸入

$ nano ~/.bash_profile

裡面貼上

# Golang
export GOPATH=<你想放 go 相關檔案的位置>

離開後重新讀取 bash_profile

$ source ~/.bash_profile

5. 安裝 Visual Studio Code 及開發環境套件

前往 https://code.visualstudio.com/ 下載並安裝
打開後再安裝 Extensions “Go”
請指名”lukehoban”作者

安裝完他會要你重開,然後你可以隨便開個 main.go 在任位置

在 main.go 中貼上

package main

import "fmt"

func main() {
	fmt.Println("Hello")
}

接著 VSCode 會提醒你可以裝一些外掛

點選 install all,他會裝以下套件

Installing 9 tools at /Users/*********/golang/bin
  gocode
  gopkgs
  go-outline
  go-symbols
  guru
  gorename
  godef
  goreturns
  golint

請務必確認他裝的位置是你設定的 $GOPATH
裝完我們可以先跑看看,點選 debug 測試
他會跳出錯誤

Failed to continue: "Cannot find Delve debugger. Install from https://github.com/derekparker/delve & ensure it is in your "GOPATH/bin" or "PATH"."

別擔心,快要成功了
先確定 VSCode 認得你設定的 GOPATH,最簡單的方法就是,檢查你的 GOPATH 有沒有多出一些程式碼,是剛剛 install all 裝的那些
確定之後,我們就關掉 VSCode,補安裝剛剛遺漏的套件 derekparker/delve:

$ go get -u github.com/derekparker/delve/cmd/dlv

[1] Mac 平台: 使用 vscode 搭建 Golang 开发环境 – http://www.selfrebuild.net/2016/11/15/mac-osx-use-vscode-config-golang-env/
[2] derekparker/delve Installation on OSX – https://github.com/derekparker/delve/blob/master/Documentation/installation/osx/install.md

在Mac上利用 .NET Core SDK 跨平台開發 C Sharp

基本相依套件

先裝好以下套件:

Homebrew(http://brew.sh/index_zh-tw.html)
X Code Command Line Tool(自己去App Store抓)

1. 安裝相依套件

brew update
brew install openssl
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/

2. 安裝 .NET Core for Mac

下載pkg來安裝:
https://www.microsoft.com/net/download

3. OS X 10.11 會發現不能跑dotnet指令

處理一下預設的路徑即可:

ln -s /usr/local/share/dotnet/dotnet /usr/local/bin

4. 測試

dotnet new
dotnet restore
dotnet run

Hello World 就出現拉~

然後就安裝Visual Studio Code,測試一下那IDE的自動完成功能。

其實VSC很聰明,基於ATOM,裝什麼就去商店抓,相依還會自己檢查,我後來想,會用這個工具主要是Debug,可以設中斷點、看堆疊,不然其實Build在CMD處理即可,PHP這種Debug可以硬幹,直接顯示在網頁上,但是我想現在應該不能這樣了,現在可是後端工程師XD!

::安裝C#套件並啟用

這個微軟的套件其實是 C# for Visual Studio Code (powered by OmniSharp)
http://www.omnisharp.net/

也會有一些相依性的東西在默默安裝

不過目前Debug區出現了一些警告,我還沒研究這是什麼…

—— 參考文獻 ——
[1] .NET – Powerful Open Source Cross Platform Development : https://www.microsoft.com/net/
[2] core/known-issues.md at master · dotnet/core · GitHub – https://github.com/dotnet/core/blob/master/cli/known-issues.md

[golang] Heroku 平台操作練習

從PHP轉戰golang,超級不習慣的,因為之前也沒有MVC的概念,學習之路更是艱辛
於是我出了個題目給自己:

Heroku + Golang + Git command deploy

我,三種全部都不會!!

沒關係,這就是學習的好機會,來吧!

*環境:Mac OS X El Capitan 10.11.6

Step 1. 安裝Go

先把golang環境架起來吧!
到官網下載golang,我習慣自己處理套件,不裝包好的pkg

sudo tar -C /usr/local -xzf go1.7.3.darwin-amd64.tar.gz

那個版本之類的要記得自己調整啊,我打這篇的時候版本是1.7.3
接著是設定環境變數

nano ~/.bash_profile

加入這幾行

#Go Lang
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/Desktop/Trees/Go
export GOBIN=$GOPATH/bin
export PATH=$GOPATH:$GOBIN:$PATH

我解說一下,第一個export把go本身執行檔、編譯之類的弄進環境變數,第二個是GOPATH,是整個Workspace的位置,go跟某些語言一樣有自動套件相依檢查機制,所以整個Workspace就是你的套件庫。第三跟第四個是export我們利用go get從repository抓下來的工具。

然後你就可以挑一個你喜歡的editor來玩囉,我是開始學習使用Visual Studio Code來玩golang拉,那GUI的特性帶來的許多方便,雖然我還是覺得他比Sublime Text 3肥了些。

Step 2. 安裝Heroku

這段就直接安裝Heroku包好的pkg了

https://devcenter.heroku.com/articles/heroku-command-line

然後,別跟我說你沒裝git…

Step 3. 測試Heroku

首先介紹幾個heroku常用指令:

heroku login : 登入heroku
heroku ps : 目前使用中的Process,也會顯示剩餘的dyno hour(heroku的計價單位)
heroku create : 創造空的app,create後面可以帶參數,會成為app的name
heroku logs : 查看log檔

假設我們已經申請好Heroku帳號,下一步就直接登入了:

heroku login

untitled

登入之後,我們可以先從遠端拉個Hello World來玩玩看Heroku的部署,輸入以下指令:

go get github.com/heroku/go-getting-started

你會發現,有一包資料夾叫做go-getting-started,出現在你設定的GOPATH裡的src資料夾,沒錯,你已經學會利用go get抓git上面的repository了!
我們切換到該reposiory中,準備部署至heroku上看看

cd $GOPATH/src/github.com/heroku/go-getting-started
heroku create
git push heroku master

這邊講解一下,我們切換到repository之後在做heroku create的動作,目的是因為heroku他會自動針對此repository,將遠端分支”heroku”設定為heroku即將產生的app git位置,在鍵入heroku create之後,他會給你兩個網址:

獨立網址,例如:https://fierce-beyond-60579.herokuapp.com/
Git Repository,例如:https://git.heroku.com/fierce-beyond-60579.git

獨立網址就是此app的唯一位置,他的git就是你之後deploy的對象。

是的就是這麼簡單,你已經部署了hello world上去heroku囉!…什麼?你說你失敗了?
我猜你一定沒有把SSH KEY給heroku!

ssh-keygen -t rsa
heroku keys:add

是的,跟github一樣,要把ssh加到網站上面才能開始一切操作喔!

Heroku也提供本地測試,只需要輸入:

heroku local web

他自己就會監聽5000 port了!
如果是自製的Project,遇到heroku local不能跑的時候,記得檢查有沒有產生Procfile檔案(請參考heroku文件,他很簡單的就只是告訴heroku你的app在process裡叫做什麼名字),或是檢查你的自製Project有沒有執行過 go install -v

Step 4. 部署自己的App

相信你已經準備好自己的Hello World專案準備弄上這個免費雲端,但是!部署前要先知道遊戲規則,要在Heroku上面部署自己的app的話,你需要裝官方認得的相依性套件管理工具,我們會以godep來做範例。

Godep相當的方便,跟go get差不多,但是它是把所有跟你的專案有關的套件都抓到你的app資料夾裡,可以獨立運作也方便管理,同時也會自動產生一個相依列表”Godeps.json”,Heroku就是以這個檔案來當作識別,抓取你app的相關資料。

安裝指令:

go get github.com/tools/godep

使用方式:

godep save ./

好的,到這裡為止,應該準備的差不多了,不過我這邊要特別註解一下關於git的部分,因為小弟平常用git都是GUI操作,只知道幾個關鍵名詞但是對command line操作git完全沒概念,所以就來記錄一下!

我們先介紹幾個常用的指令:

git init : 初始化你的project,主要是產生 .git 資料夾
git remote add <remote> <url> : 新增遠端git位置
git remote remove <remote> : 移除遠端git位置
git remote -v : 查看遠端詳細位置
git add -A . : 一次新增所有檔案,準備commit
git commit -m <title> -m <message> : commit 加上訊息 git status : 顯示目前repo狀態
git push : PUSH到指定的遠端與分支

我們假設你已經寫好你的Hello World了…什麼?你還沒寫?好吧,我的借你抄一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    http.HandleFunc("/", hello)
    fmt.Println("listening...")
    err := http.ListenAndServe(":"+os.Getenv("PORT"), nil)
    if err != nil {
        panic(err)
    }
}

func hello(res http.ResponseWriter, req *http.Request) {
    fmt.Fprintln(res, "hello, world")
}

稍微說一下,一般我們在處理Listen Port時會直接寫上例如:5000這樣,但是在Heroku線上,他只開80 Port給你,並且寫好了環境變數,使用方式就如我的範例那樣,os.Getenv(“PORT”)就可以拿到80這個數字,不包含冒號喔!

跑完godep、跑完git init,準備好Procfile檔案(反正就是在專案根目錄生一個叫做Procfile的檔案,裡面寫著 web: go-getting-started 即可,詳情請看https://devcenter.heroku.com/articles/getting-started-with-go#define-a-procfile),就可以準備部署了,我們可以先檢查一下自己的git remote 分支 heroku 目前被指向誰,輸入 git remote -v:

untitled

請注意看我的heroku目前被指向 https://git.heroku.com/young-ridge-89894.git ,這代表我如果在這個專案進行部署,會被部署到heroku上的young-ridge-89894這支app,如果你確定這是你的目標,那接下來就好處理了,但是如果不是,記得鍵入以下指令:

git remote remove heroku 

並加入遠端目標,例如:

git remote add heroku https://git.heroku.com/polar-sierra-53616.git

如果你是想要部署在新的app上面,只要在remove之後直接heroku create即可唷!
如果你的遠端目前已經被某個別的project部署過,只要在部署時加上 -f 就可以強制部署了!

部屬就跟git command操作一樣,先add、再commit、再push到遠端
範例指令:

git add -A .
git commit -m "Test"
git push heroku master

untitled

登登登登~完成了!

後記

我覺得應該可以開一篇關於go framework的東西XD
在範例專案 github.com/heroku/go-getting-started 中,他是使用了gin-gonic這個framework來開發的網頁,包含了html template的使用方法在裡面,感覺很好玩!

還有在利用Visual Studio Code的時候,發現了Git History這個套件(https://github.com/DonJayamanne/gitHistoryVSCode),他可以直接在Visual Studio Code中看到Git Log的Graph唷!使用方式就是 CMD + shift + P ,選擇 git view history (log) 。

阿對了,如果你是從Sublime Text轉來使用的人,可以打開一個功能,絕對會讓你有回到家的感覺,於選單的「使用者設定」中,插入以下:

"editor.renderIndentGuides": true

瞧瞧他打開了什麼?是垂直整理線!

——參考文獻——
[1] Getting Started on Heroku with Go – https://devcenter.heroku.com/articles/getting-started-with-go
[2] Go Dependencies via Godep – https://devcenter.heroku.com/articles/go-dependencies-via-godep
[3] Heroku Local – https://devcenter.heroku.com/articles/heroku-local
[4] Godep – https://github.com/tools/godep
[5] Managing Your SSH Keys – https://devcenter.heroku.com/articles/keys
[6] Deploying a Golang Project to Heroku – http://www.zhubert.com/blog/2014/03/08/deploying-golang-to-heroku/
[7] Manage Dependencies With GODEP – https://www.goinggo.net/2013/10/manage-dependencies-with-godep.html
[8] Git 教學(1) : Git 的基本使用 – http://gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/
[9] Getting Started with Go on Heroku – https://mmcgrana.github.io/2012/09/getting-started-with-go-on-heroku.html
[10] [NodeJS] 將程式部署到 Heroku 上 – NodeJS on Heroku – http://cire.pixnet.net/blog/post/37369672-%5Bnodejs%5D-%E5%B0%87%E7%A8%8B%E5%BC%8F%E9%83%A8%E7%BD%B2%E5%88%B0-heroku-%E4%B8%8A—nodejs-on–heroku
[11] Gin Gonic – https://gin-gonic.github.io/gin/
[12] How to attach my repo to heroku app – http://stackoverflow.com/questions/6877915/how-to-attach-my-repo-to-heroku-app
[13] Overwriting an existing Heroku app – http://stackoverflow.com/questions/14437903/overwriting-an-existing-heroku-app
[14] 在Heroku部署Rails專案結合AWS S3存放上傳圖片 – http://springok-blog.logdown.com/posts/2015/10/29/heroku-deploy-a-rails-project-with-aws-s3-storage-upload-pictures

讓 WordPress 使用者只看見自己上傳的媒體內容

快把以下這段加到你的 functions.php 裡,立馬見效!

1
2
3
4
5
6
7
8
9
10
11
function restrict_media_library( $wp_query_obj ) {
    global $current_user, $pagenow;
    if( !is_a( $current_user, 'WP_User') )
    return;
    if( 'admin-ajax.php' != $pagenow || $_REQUEST['action'] != 'query-attachments' )
    return;
    if( !current_user_can('manage_media_library') )
    $wp_query_obj-&gt;set('author', $current_user-&gt;ID );
    return;
}
add_action('pre_get_posts','restrict_media_library');

macOS Sierra 10.12 使用心得與技巧

2016-09-20,macOS新版本一上架我就立刻下載安裝了,忍受El Capitan的kernel爆炸太久了,就賭這新版本應該會比以前更好用(吧)。

安裝完立刻把Siri關掉,我沒事是不會跟電腦聊天的,接著陸續安裝好基本需求工具(謎之音:X-Force全系列都開不起來,有這方面需求的人要注意),以及分割100GB給Bootcamp,大致上完成了應用方面的軟體安裝。

目前使用上沒有太大問題,但感覺系統還沒有很穩定,像是有一次從休眠模式醒來後,顯示卡延遲了快30秒才能正常顯示顏色,還有就是使用Safari時,如果已經安裝好Chrome,他會詢問是否要從Chrome匯入書籤,我明明就按不要結果他全部都匯入進來了…整個崩潰,現在書籤超亂。開發環境的部分,因為我想把開發環境轉移到虛擬機器上,所以就不針對開發工具做測試了。接下來有幾個小地方想特別介紹一下:

1. 打開「允許任何來源的App安裝」這功能竟然不見了

如果有在 Mac OS X 測試安裝過非官方認證的App,一定看過這個畫面

file

但是在macOS Sierra被拿掉了,沒關係,只要在Terminal輸入以下指令就可以變出這個功能:

sudo spctl --master-disable

2. 新功能「大寫鎖定鍵自動切換輸入法」目前跟Chrome 53.0.2785.116 (64-bit)有衝突

目前的版本macOS Sierra 10.12有個自動切換輸入法的功能,就是當你使用中文輸入法,想輸入英文時,除了直接切換成英文輸入法之外,還可以按下caps lock鍵來暫時輸入英文,在macOS Sierra中,按下caps lock後還可以自動幫你切換成英文輸入法,但是這功能在Chrome中會造成當機,可以暫時先把它關閉:

typer

但我不知道是要等Chorme更新還是Sierra更新就是了XD

3. 「螢幕擷取」終於可以選擇輸出檔案格式

這真是太感動了,直接看圖就知道

window

實在是困擾我超級久,之前每次螢幕截圖都還要轉檔超麻煩的

WordPress 轉址與中文網址在 IIS 上會遇到的問題

以下包含暫時解法,因為是直接動WordPress Kernel

1. WordPress 網址無法轉址(Permalinks)

要修改 web.config 檔

 <?xml version="1.0" encoding="UTF-8"?>

<configuration>

 <system.webServer>

 <rewrite>

 <rules>

 <rule name="wordpress" stopProcessing="true">

 <match url=".*" />

 <conditions logicalGrouping="MatchAll">

 <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />

 <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />

 </conditions>

 <action type="Rewrite" url="index.php" />

 </rule>

 </rules>

 </rewrite>

 </system.webServer>

</configuration>

2. WordPress 中文網址無法正常轉址

修改 wp-includes/ 底下的 class-wp.php

$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';

改成

$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? mb_convert_encoding( $_SERVER['PATH_INFO'], 'UTF-8', 'Big5') : '';

然後

list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );

改成

list( $req_uri ) = explode( '?', mb_convert_encoding( $_SERVER['REQUEST_URI'], 'UTF-8', 'Big5' )  );

3. WordPress 中文檔案上傳錯誤
修改 wp-admin/includes/ 底下的 file.php

$filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback );

改成

$fileTypeNameArr = explode( '.', $filename );
$countNum = count( $fileTypeNameArr ) - 1;
$fileExt = $fileTypeNameArr[$countNum];
$filename = time() . '-' . rand( 0,999999999 ) . '.' . $fileExt;

—-參考文獻—-
[1] Using Permalinks – https://codex.wordpress.org/Using_Permalinks
[2] [WordPress]中文網址,發生404錯誤,教你如何解決? – http://dev.brucelulu.com/topics/180
[3] How to Setup WordPress Permalinks – https://gist.github.com/jonahvsweb/5479580
[4] IIS permalinks compatibility – web.config not working? – http://stackoverflow.com/questions/27988710/iis-permalinks-compatibility-web-config-not-working
[5] 解決 WordPress 在 IIS 中無法使用固定網址的問題 – http://www.minitw.com/archives/server/solved-can-not-be-used-in-iis-wordpress-permalink-issue.htm?variant=zh-tw
[6] WordPress小技巧(1):解決中文檔名圖片無法上傳問題 – http://www.cc.net.tw/2013/07/434/

Google Cloud的MySQL炸掉了 之 參數調整方法

搜尋了一下,還蠻多人有一樣的困擾的,MySQL突然就被衝到炸掉。
首先第一步,調閱MySQL log來看一下,發現記憶體調用失敗,於是把內部log打開:

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

發現總是跑出

InnoDB: The InnoDB memory heap is disabled

如果沒開,他會直接吃主機記憶體,處理一下 /etc/mysql/my.cnf,加入這句:

innodb_use_sys_malloc =  0

重開後就出現訊息

InnoDB: Initializing buffer pool, size = 128.0M

是的,預設buffer pool為128MB,稍微爬文了一下發現是夠用的,以中型網站來說。
這個參數並不是越大越好,要看機器本身夠不夠用。

—-參考文獻—-
[1] Ubuntu 安裝和設定 MySQL – http://www.arthurtoday.com/2009/11/ubuntu-910-mysql.html
[2] mytop – MySQL 效能監測工具 – http://www.arthurtoday.com/2013/04/ubuntu-install-mytop.html
[3] Amazon EC2 免費實例: MySQL 崩潰之資料庫 log 查看及設定調教 – http://40era.com/4245/
[4] 15.14 InnoDB Startup Options and System Variables – http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html
[5] How and When To Enable MySQL Logs – http://www.pontikis.net/blog/how-and-when-to-enable-mysql-logs
[6] How to Fix ERROR InnoDB: The InnoDB memory heap is disabled – https://www.debian-tutorials.com/how-to-fix-error-innodb-the-innodb-memory-heap-is-disabled

不透過Less更改Bootstrap3漢堡選單的breakpoint

這樣比較快XD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@media (max-width: 1200px) {
    .navbar-header {
        float: none;
    }
    .navbar-left,.navbar-right {
        float: none !important;
    }
    .navbar-toggle {
        display: block;
    }
    .navbar-collapse {
        border-top: 1px solid transparent;
        box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
    }
    .navbar-fixed-top {
        top: 0;
        border-width: 0 0 1px;
    }
    .navbar-collapse.collapse {
        display: none!important;
    }
    .navbar-nav {
        float: none!important;
        margin-top: 7.5px;
    }
    .navbar-nav&gt;li {
        float: none;
    }
    .navbar-nav&gt;li&gt;a {
        padding-top: 10px;
        padding-bottom: 10px;
    }
    .collapse.in{
        display:block !important;
    }
}

—-參考文獻—-
[1] Change bootstrap navbar collapse breakpoint without using LESS – http://stackoverflow.com/questions/19827605/change-bootstrap-navbar-collapse-breakpoint-without-using-less