2014/02/21

Vim Macro

在使用 vim 的時候常常會不小心讓狀態列出縣 recording 的字樣,按 q 可以消除,今天不小心看到某篇文章才發現這是 vim 的 macro 功能,而且十分強大,vim 真的是一個可以活到老學到老的工具,來示範幾個範例。

.sample {
    border: 1px; color: red; padding: 4px; margin: 10px;
}

以這個 css class 來講,假設我們要讓每個 ; 後斷行,有非常非常多的方式,marco 的步驟如下

  1. 先將游標移到 border 字樣
  2. 在 visual mode 按下 qa(qa 是指將過程錄到 a 這個暫存,a-z, 0-9 都可以使用)
  3. 按下 f;,此時游標會跑到 ; 上面
  4. 按下 a,游標會跑到 ; 後面並且變成 insert mode
  5. 按下 enter,完成了第一個斷行
  6. 按下 esc 變成 visual mode,在按一次 q 完成錄製
.sample {
    border: 1px;
    color: red; padding: 4px; margin: 10px;
}

現在內容應該會變成這個樣子

將滑鼠移到 color 那行按下 @a(@ 就是執行 macro,後面接要使用的紀錄),斷行自動產生了,如果要到每一行按 @a 也太弱了,可以在前面接數字指定 marco 次數,以這個 case 來說 3@a 就可以完成所有的斷行。

另外示範一個 increment 的範例,在 vim 中使用 ctrl + a 可以針對某個數字增量,ctrl + x 可以減量,但在 windows 裡面 ctrl + a 會被定義為全選,關掉的方式很簡單,打開 .vimrc 檔,在 behave mswin 下加上 :nunmap <C-a>,這樣便會取消全選功能。

a = 1

以這個例子當範例,可以選擇取代法,也可以用 macro

  1. 在 visual model 將游標移到 a = 1 那行
  2. 按下 qa
  3. 使用 yy 複製,按下 p 貼上
  4. 移到新的行數後按 ctrl + a,會發現數字變成 2 了
  5. 按下 q 完成錄製

按下 @a 可以發現新的行數會變成 a = 3,搭配數字便可以做出你需要的數量了。

2014/01/21

偵測內容改變警告

Facebook 有一個貼心的小功能,如果你有留下訊息,但在還沒有儲存的情況下意外的離開頁面時,Facebook 會給予警告,在討論區如果打了一堆字卻不小心按到回上頁,或者是不小心按到某個連結整頁直接跳走,而瀏覽器又沒有 cache 住你剛輸入的內容,只能用欲哭無淚來形容,怎麼實作這個功能呢。

HTML

Javascript
var isChanged = false;

$('select, input, textarea').on('change', function() {
        isChanged = true;
});

$(window).on('beforeunload', function() {
    if (true === isChanged) {
        return '您已經修改過內容,確定要離開嗎?';
    }
});

簡單來說,預設一個變數是叫 isChange 為 false,偵測該標單的 input、select、textarea 等物件內容改變時將 isChage 更改為 true,然後在 window 的 beforeunload 事件上判斷如果 isChange 為 true 時予以警告。

demo page

2013/12/14

Cocktail Class

麥傑是由一群對調酒有熱忱的年輕人所經營的公司,長期跟他們購買產品的經驗,不論是產品品質以及服務都沒有話說,這次很榮幸受到 MJFLAIR 的邀請,可以參加他們試辦的調酒課程,來聊一下整個學習的過程。

L’arrière-cour

授課地點位於安和路的小巷裡,名為後院的酒吧,其實我沒太多去 bar 的經驗,來到後院讓我感覺很新鮮。

地址:台北市安和路二段23巷4號。
Tel:(02)27047818
營業時間:
19:00 PM ~ 3:00 AM (週間)
19:00 PM ~ 4:00 AM (週末)
據朋友說老闆是一位 Whiskey 界的能人,所以裡面有許多跟 Whiskey 相關的布置

進入酒吧一眼望去就是琳琅滿目的酒,兩位授課老師已經在為今天的課程做準備

典雅的裝潢以及輕快的爵士樂,有別於一般夜店的喧鬧,多了一份輕鬆寫意的恬靜

布置就跟我在追的幾本日本調酒漫畫類似,所以踏入真實的店家時真的十分興奮

MJFLAIRSHOP 提供的上課器材

今天要介紹的兩個酒種,Gin 使用的是 Beefeater,Whiskey 使用的是格蘭立威 12 年

小熊老師開始講解一些調酒的器材知識

小熊老師示範 Rolling

Silence 老師提供的第一杯調酒,裡面的果粒是葡萄柚,非常好喝喔

小熊老師指導 Rolling

Rolling 主要的目的在讓酒可以更 smooth,用類似拉茶的方式可以讓酒有更多綿密的氣泡更加順口,看似簡單,其實要拉的順手真的不容易。

Silence 老師指導 pouring 的技巧

熟練的 Bartender 可以直接使用酒嘴不透過 Jigger 倒入 recipe 所需要的 ml 數,當然需要長時間的練習才會抓得準。

小熊老師指導 Boston Shaker 的使用技巧

Shake 主要功能有 Mix、打入空氣以及冰鎮的效果,即便同樣的 ingredient,不同的 shake 方式以及 shake 的時間都會造成味道相當大的差異,會大大影響一杯調酒的結果喔。

Silence 老師教導蒸餾的歷史以及暢談 Whiskey 的一些故事

坦白說,我也有買幾本調酒歷史背景以及觀念的書,但多半看過就沒印象了,因為酒的種類繁多,每一家製酒公司所製造出來的口味以及方式也都不同,一般非從事這行的人讀起來是非常枯燥無味的,但 Silence 老師解說起來就像在講故事,整個內容聽起來比起看書有趣很多,也會更覺得這些酒廠很了不起,台灣真是個喝酒的天堂。

使用 ISO 杯品飲 Whiskey

在上課過程用了非常多的杯子,也了解到每種杯子的存在不只是造型,更是有其功能存在,跟 Silence 老師學習了品飲 Whiskey 的方式,往後更知道怎麼與 Whiskey 相處,要享受的人必須知道怎麼品酒而不是拚酒,同樣的飲品用不同的觀念跟方式去喝會得到完全不同的感受。

Silence 老師傳授怎麼品聞酒體

小熊老師調製的 White Lady,使用了 Beefeater、Cointreau 以及新鮮檸檬汁

兩位老師有問必答,任考不倒

上完課程之後體驗到很多,我買了許多書籍,也看了非常多的 YouTube 影片,但加起來可能都沒來上一堂課收穫來的多,有一些眉眉角角若不是當面接觸老師是很難學習跟感受的,品飲酒類是一種文化,學習酒的知識在社會上絕對是與人交流很棒的一個媒介,在許多歐美國家喝酒就是一種生活態度,適量的酒精催化可以使人愉悅,為什麼喝不重要,但怎麼喝、喝的對不對、喝的好不好就十分重要,簡單的一兩隻基酒,簡單的調酒器材以及材料就可以成為生活中的小點綴,我希望我的人生可以多采多姿,從學習調酒開始。

2013/12/12

alias

在 linux 如果常用某些變數的組合方式,可以透過 alias 這個指令把該使用習慣固定起來,例如說:

# ls 會列出當下目錄的檔案
ls
index.tpl  s.tpl  sma.tpl

# 加上不同的參數會有不同的呈現方式以及結果
ls -last
total 8
   4 drwxr-xr-x   43 KingChan Administ     8192 Dec 11 11:46 ..
   2 drwxr-xr-x    5 KingChan Administ     4096 Dec  9 14:09 .
   1 -rw-r--r--    1 KingChan Administ      190 Dec  9 12:34 sma.tpl
   1 -rw-r--r--    1 KingChan Administ      275 Nov 14 12:35 index.tp
   1 -rw-r--r--    1 KingChan Administ      184 Nov  8 16:53 s.tpl

# 假設我們長時間想要使用這樣的參數組合,可以透過以下方式命名
alias ls='ls -last'

# 解除的方法為
unalias ls

# 如果想要開機常駐的話,只要在 home 下面編輯 .bashrc,加入
alias ls='ls -last'

# 存檔後執行 source
source .barshrc

2013/12/11

Grep And Sed

grep 是 Linux 用來找尋檔案符合你想要搜尋文字的程式,而 sed 是用來取代單一檔案內文的功能,兩者搭配起來十分強大,先簡單介紹一下參數,參考於鳥哥的 Linux 私房菜

grep

-i:不區分大小寫地搜索。默認情況區分大小寫, 
-l:隻列出匹配的文件名, 
-L:列出不匹配的文件名, 
-w:隻匹配整個單詞,而不是字符串的一部分(如匹配 'magic',而不是 'magical')
-C:匹配的上下文分別顯示[number]行, 

sed

-n:使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到螢幕上。但如果加上 -n 參數後,則只有經過 sed 特殊處理的那一行(或者動作)才會被列出來。
-e:直接在指令列模式上進行 sed 的動作編輯;
-f:直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的 sed 動作
-r:sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i:直接修改讀取的檔案內容,而不是由螢幕輸出。

範例

grep -ir 'LBJ' . # 不分大小寫遞迴搜尋內含 LBJ 內容的文件
grep -irl 'LBJ' . # 不分大小寫遞迴搜尋內含 LBJ 內容的文件,只列出檔案名稱
grep -ir 'LBJ' . | grep -v 'wade' # 不分大小寫遞迴搜尋內含 LBJ 內容的文件,並且排除有 Wade 的文件
grep -rl 'LBJ' . | xargs sed -i 's/lbj/bosh/gi' # 不分大小寫將 lbj 取代為 bosh
sed -e 's/lbj/bosh/gi' x.txt # 不分大小寫將單一檔案的 lbj 取代為 bosh

2013/10/31

Get For Loop Variable When Use Ajax Function

在案例中常常使用 jQuery 的 $.get$.post 來取 ajax 的內容,例如說:

 $.post("ajax.php", function(response) {
  console.log(response);
 });

假設今天使用迴圈來跑此功能,常常要配合將相對應的內容作變動,假設今天有 10 個 div 要取值,要找到對應的 div 回傳的話,除了將順位由 server 端帶回來以外,有一種寫法可以使 ajax 抓到迴圈的變數。

 for (i = 0; i < 6; i++) {
  !function(i) {
   $.post("ajax.php", {param: i}, function (response) {
    $("div").eq(i).html(response);
   });
  }(i)
 }

2013/10/02

延長 phpMyAdmin 的登入時間

$cfg['LoginCookieValidity'] = 60 * 60 * 24; 
ini_set('session.gc_maxlifetime', $cfg['LoginCookieValidity']);