Sunday, July 24, 2011

夏日清爽小食: 醃蘿蔔

前幾天在租書店看到某一期的"好吃"在講醬料,
覺得蠻實用的就借回家看囉!
結果第一個試做的倒不是醬料而是醃蘿蔔.
而且它還有個很厲害的名字叫做"大根千枚漬".

材料:
白蘿蔔 *500g
細砂糖 *5大匙
糯米醋 *5大匙
昆布(乾) *1片 (這個我省略了XD)
乾辣椒 *1支 (我換成生辣椒去籽切細絲)

步驟:
1. 白蘿蔔切成0.3-0.5公分的薄片 (削皮後可以把外面比較粗的纖維一起削掉)
2. 蘿蔔片放入塑膠袋後, 撒鹽, 密封後輕輕搓揉約1分鐘
3. 靜置10分鐘
4. 將蘿蔔片排出的水份倒掉以去除辣味
5. 加入砂糖, 醋, 昆布, 辣椒等調味料稍微搓揉後等待醃漬入味 (最後其實我砂糖的量只放了醋的一半)

我在醃了兩三個小時之後有偷吃一下,
覺得味道差不多結果過了一天就變得有點太酸,
所以就先把醃漬的湯汁倒掉溜.

Wednesday, July 13, 2011

iOS In App Purchase 學習筆記 (3) : 如何從App Store取得商品資訊

在進入購買階段之前,
我們首先需要告訴使用者這個app提供了哪些商品(product)及這些商品的詳細功能描述.

Store Kit提供了統一的機制讓我們能從App Store獲得所需要的商品資訊.
步驟如下:
1. 產生一個SKProductsRequest的物件, 並且將我們想要取得的商品識別代號(product identifier)設定好.
2. 產生一個實作了SKProductsRequestDelegate的物件, 並將其註冊到SKProductsRequest物件身上.
3. 送出request
4. 當App Store收到這個request後, 它會將結果放在SKProductsResponse的物件中並且通知實作SKProductsRequestDelegate的物件


我們可以利用一個SKProductsRequest帶多個商品識別代號來查詢多筆商品資訊.
App Store會先將各別商品資訊包裝成SKProduct的格式再把它們放在SKProductsResponse裡.

以下是會用到的類別們:

SKProductsRequest

// 設定delegate
@property(nonatomic, assign) id delegate
// 設定一個或多個商品識別代號
- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers


SKProductsRequestDelegate

// 繼承自SKProductsDelegate, 當request發生錯誤時會被呼叫
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
// 繼承自SKProductsDelegate, 被呼叫即表示跟這個request相關的通訊已經結束
- (void)requestDidFinish:(SKRequest *)request
// 成功取得商品資訊
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response


SKProductsResponse

// 無效的產品識別代號
@property(nonatomic, readonly) NSArray *invalidProductIdentifiers
// 有效的商品資訊
@property(nonatomic, readonly) NSArray *products


App Store會將商品識別代號視為無效可能有以下幾個原因:
1. 商品識別代號拼錯
2. 商品被標示為無法販售
3. 在iTunes Connect上對商品的更動尚未被更新到App Store上

SKProduct

@property(nonatomic, readonly) NSString *productIdentifier
@property(nonatomic, readonly) NSString *localizedTitle
@property(nonatomic, readonly) NSString *localizedDescription
@property(nonatomic, readonly) NSLocale *priceLocale
@property(nonatomic, readonly) NSDecimalNumber *price


對於商品的多國語言設定需在iTunes Connect上完成.

Sunday, June 26, 2011

在iTunes Connect上看懂你的sales report

標題寫的好像很厲害不過這邊要主要介紹的只會有product type啦XD

app上架之後,
每天早上打開電腦的第一件事就從開gmail變成開itunes connect啦!
Sales and Trends頁面會先以Dashborad的方式來瀏覽.
主要就是可以讓你用長條圖或是折線圖得方式來了解銷售量.
不過我覺得這個模式蠻不容易看的,
如果有多個app的話會被累積在一起算很難瞭解各別app的銷售情況.

所以我都是用Sales模式來看,
就可以看到下面這個表格.

可以用右邊的Apple ID來大致區別不同的app,
也可以從Store看出大概是哪些國家的人裝了你的app,
如果發現征服了新的國家就會自我感到良好這樣 囧

不過我最主要會看的是Type那欄.
Type是Product Type的簡寫,
是用來告訴你這是什麼類型的交易(是初次下載還是更新等等)

以下就是Type各種可能的值囉.

















































Type IdentifierCategoryDescription
1Free or Paid AppsiPhone and iPod Touch
7UpdatesiPhone and iPod Touch
IA1In AppsIn-App Purchase
IA9In AppsIn-App Subscription
1FFree or Paid AppsUniversal Apps
7FUpdatesUniversal Apps
1TFree or Paid AppsiPad Touch
7TUpdatesiPad Touch


Saturday, June 25, 2011

天兵的紐西蘭南島成長日記 (3) 基督城2011年初震後市區封鎖範圍

這是五月初在基督城時市區封鎖的區域,
大致上是Salisbury St., Durham St., Saint Asaph St., 和Barbadoes St.圍起來的範圍.

封閉區的路口都有用鐵網圍起來也有士兵在把守.
想要偷偷跑進去應該是不可能低.

吃東西的話可以在市中心附近的大賣場區(有New World)買回去煮,
裡面也有麥當勞, sushi bar, subway等等東西.
要不然就要到遠一點的Riccaton那邊餐廳比較多也比較熱鬧.
有讓我念念不忘的Nandos可以吃真是太開心了.

Tuesday, June 21, 2011

Facebook: authentication and error handling

認證的種類
1. server-side flow: 指令由自己的server端發出
2. client-side flow: 指令由client端發出(ex: 瀏覽器, 手機app, 桌面app)

認證三步驟
1. 使用者認證(user authentication)
- 顯示接下來希望能獲得授權的app名稱, 並且讓使用者輸入帳號密碼來驗證身分

2. app授權(app authorization)
- 顯示這個app將會提供使用者什麼功能並且會需要使用哪些個人資料

3. app認證(app authentication)
- 使用者同意授與app存取資料的權限

什麼是access token?
access token是用來透過graph api向facebook下指令時所需的東西, 在app完成認證之後就能夠獲得.

server-side flow
1. 拿authorization code
REQUEST: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=read_stream
REDIRECT TO: http://YOUR_URL?code=A_CODE_GENERATED_BY_SERVER

2. 拿access token
REQUEST: https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE
RESPONSE: access_token=YOUR_ACCESS_TOKEN&expires=EXPIRE_TIME


client-side flow
拿access token

REQUEST: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=read_stream&response_type=token
REDIRECT TO: http://YOUR_URL#access_token=166942940015970%7C2.sa0&expires_in=64090


什麼情況下access token會無效?
1. token過期 (一般情況下使用期限是2小時)
- 使用者曾經同意app的存取權, 但超過當初授予此token所限訂的使用期限.
- 當app利用此token透過graph api下指令時, 會收到HTTP 400的回應並且得到以下錯誤訊息
{
error: {
type: "OAuthException",
message: "Session has expired at unix time
SOME_TIME. The current unix time is SOME_TIME.”
},
}


2. 使用者更改密碼
- 使用者曾經同意app的存取權, 但之後換了密碼
- 當app利用此token透過graph api下指令時, 會收到HTTP 400的回應並且得到以下錯誤訊息
{
error: {
type: "OAuthException",
message: "The session has been invalidated because
the user has changed the password.",
},
}


3. 使用者變更app的存取權限
- 使用者曾經同意app的存取權, 但後來進入app管理頁面取消權限(如下圖)

- 當app利用此token透過graph api下指令時, 會收到HTTP 400的回應並且得到以下錯誤訊息
{
error: {
type: "OAuthException",
message: "Error validating access token: USER_ID
has not authorized application APP_ID",
},
}


4. 使用者登出facebook
- 使用者曾經同意app的存取權(app並未取得offline_access的能力), 但之後使用者登出
- 當app利用此token透過graph api下指令時, 會收到HTTP 400的回應並且得到以下錯誤訊息
{
"error": {
"type":"OAuthException","message":"Error validating
access token: The session is invalid because the user logged out."
}
}


access token無效該如何處理?
首先要注意的就是在下每個graph api指令時都要檢查是否有錯誤發生. 確認是token失效的問題之後就要重新取得認證. (只是單純的過期, 則只需要再次登入, 若是使用者收回了app存取權, app就需要重新獲得授權)

參考資料
1. How-To: Handle expired access tokens
2. Authentication

Sunday, June 12, 2011

我系列: ?

有時候我實在搞不清楚自己是在狀況內還是狀況外.

Tuesday, June 07, 2011

書書的小熊課: 我的縫紉魂徹底燃燒了!



不知道為什麼我很愛用手縫東西的感覺XD
平常釦子掉或是衣服脫線之類簡單的問題都會自己想辦法修復,
而且縫啊縫都會覺得心情很好!
用縫紉機嗒嗒嗒嗒反而我不是那麼喜歡.

去年發現書書回台灣開了小熊課,
熊熊都長得好可愛而且又可以滿足我縫紉的渴望真是太完美了.
不過看到的時候已經太晚所以就只能扼腕啦!
今年消息才剛出來我整個人就蓄勢待發,
好不容易報名成功囉! (春天小熊太搶手, 我上的是後來調整過的綜合班)
春天小熊有好多種顏色! 我其實最喜歡黃色的悠.

外星小熊越看越可愛當初應該報名這個的XD

[以上圖片轉自 小熊穀倉 2011年台北的小熊課報名通知]

到達教室之後就先挑選材料包,
最後選的是淺藍色的毛料,
材料包裡的毛料已經是裁切並且大致上車縫好了,
我們需要做的就是把頭身體四肢接起來塞入棉花裝耳朵最後做出眼睛鼻子嘴巴.
講起來好像很簡單但是我們從早上九點半弄到晚上七點半啊 囧

首先小熊的頭要用棉花塞的硬邦邦的這就已經是個大工程了.
(要是硬的才能夠撐起臉部表情跟線條)
接著要把頭跟四肢接上身體,
要很大的力氣才能把關節轉緊呢!

這張圖就是身體各部分都接起來之後拍的,

把四肢塞滿棉花之後就要利用梯形縫法收口這樣才不會看到線的痕跡悠.
接著小熊的身體底部要先放玻璃沙,
上面才用棉花這樣才坐的穩.

背後同樣也是用梯形縫法,
不過最後要線沿著小雄的脊椎(!!??)直的縫來固定,
讓我想到檀香刑頓時有點毛毛的啊XD

背後完成小熊就能坐的直挺挺的囉!
不過沒有表情看起來有點怪.

加上耳朵就有好一點顛.

利用剪刀把臉部範圍的毛修掉,
再請老師幫我把眼睛的位置用大頭針標出來,
眼睛是靈魂之窗一定要很慎重啊!

接下來就要把眼睛固定上去,
這邊的技巧挺特殊的有點不知道該怎麼形容,
總之就是要利用收緊兩隻眼睛底下相通的線來做出熊熊臉的弧度.
我的線一直卡住重做了三次都快流淚了@.@
最後是助教幫我弄好的.
鼻子用的是較粗的線縫出一層水平線,
上面在縫上一層垂直線這樣才能完全蓋住底下的毛色,
嘴巴也是直接用縫的做出微笑的感覺悠.

最後在脖子上打個蝴蝶結就大功告成囉.


做小熊真是一個很特殊的回憶,
謝謝書書利用短暫歸國的時間開課,
書書媽做的午餐炒米粉跟排骨湯都好好喝,
還有助教們跟書書姐都有耐心的幫住我們真是太感謝啦!

Tuesday, May 24, 2011

炒麵



之前只有煮過日式炒烏龍麵,
最近開始嘗試台式炒麵沒想到還挺好吃的.
上禮拜我有四餐都是吃炒麵啊XD

材料:
1. 肉絲(豬後腿肉) *150g
2. 小白菜
3. 木耳 *4棵
4. 洋蔥 *1/2個
5. 紅蘿蔔 *1/3根
6. 鹽, 米酒, 醬油
7. 雞粉

步驟:
1. 絞肉加入鹽, 米酒, 醬油醃一個下午
2. 木耳, 洋蔥, 紅蘿蔔切細絲
3. 小白菜切段
4. 燒一鍋水煮麵條
5. 起油鍋將洋蔥炒至透明
6. 加入木耳, 紅蘿蔔炒熟並用雞粉調味
7. 加入肉絲炒熟
8. 加入青菜
9. 麵煮熟後瀝乾倒入炒鍋攪拌均勻
10. 用鹽及醬油調味
11. 完成

賞你個竹筍炒肉絲



藤條打手心(還是只要打小孩都算)被稱為竹筍炒肉絲的說法到底是從什麼時候開始的啊!!??
不過印象中我媽好像沒做過這道菜(我指的真的是菜XD)

材料:
1. 竹筍 *1/2支
2. 肉絲(我用的是豬後腿肉) *200克
3. 鹽, 米酒, 醬油
4. 辣椒

竹筍是在菜市場買的,
本來以為是綠竹筍,
結果老闆娘跟我說不是講了一個奇怪的名字我聽了兩次還搞不懂,
據說我買的這種品質沒有綠竹筍好但是煮湯跟用炒的也都還不錯.
回來查了一下覺得可能是烏腳綠竹筍吧!!!???
60塊長得好大一支(老闆還有幫我剝殼悠)
另外一半的竹筍我拿去煮排骨湯囉.

步驟:
1. 絞肉加入鹽, 米酒, 醬油醃一個下午
2. 竹筍切成細條狀, 辣椒切絲
3. 起油鍋加入竹筍拌炒
4. 加少許水蓋鍋蓋悶煮一下並用鹽巴調味
5. 竹筍撈起來
6. 絞肉入鍋炒至快熟, 把竹筍放回去
7. 加辣椒絲一起炒熟
8. 完成

懷舊的黏巴達

這幾天看電視時不小心聽到丁. Lo姐姐的新歌,
聽著聽著覺得這旋律也太過熟悉了吧!

苦思許久才想起來.

這是在我小時候(遠目)曾經風行一時的黏巴達啊!!!
甚至連很多人的車子倒車時唱的都是這首歌.
還是只有南部這樣 囧a
麻煩北部的鄉親跟我講一下好嗎XD



聽著聽著有沒有想跟著舞動起來啊XDXD
有沒有有沒有.

Android: Activity, Task, and Back Stack

最近又開始在跟Android培養感情XD,
在看Fragment的時候發現有些觀念還是有些模糊,
於是又回來看Activity溜.
順便做個筆記.

[1] Activity
- An activity is an application component that provides a screen with which users can interact in order to do something.
- activity是構成application的單元, 它專門負責某個功能並且提供界面讓使用者能與它互動.

[2] Task
- A task is a collection of activities that users interact with when performing a certain job.
- 在使用者操作app的時候會接連的喚起不同的activity, task指的就是這一連串activity. 在一般情況所有被同一個app喚起的activity會屬於同一個task, 但我們可以透過在以下方式指定activity歸屬於task的規則:
1. 喚起activity時下條件: 利用Intent
2. 設定activity本身的屬性: 利用Manifest

[3] Back Stack
- The activities are arranged in a stack (the "back stack"), in the order in which each activity is opened.
- 每個task都會有對應的back stack來存放所有屬於它的activity, 依照activity被喚起的順序來排列, 最新的在上面. 當使用者按了BACK鍵, 最上方的activity就會從back stack中移除, 回到前一個activity.


(上圖中所有的activity都屬於同一個task, 按了BACK後會從Activity 3回到Activity 2.)

[4] Application, Activity, Task, and Back Stack
- 當使用者開啓某個app後, 若是這個app的task已經存在, 則這個task則會被叫回前景繼續執行. 若不存在, 系統則會為app開啓新的task並將"main" activity放在back stack中
- 若使用者連續的按BACK鍵, activity會依序從stack中移除, 直到stack變成空的, 此時這個task也不再存在. 這時將會回到Home畫面或者是將這個task叫起來的task(完全是在繞口令XD)

[5] Activity and Task

要怎麼指定activity該如何以及連結到哪個task呢? 就是透過在manifest中設定activity的launch mode或是在用intent喚起activity時帶特殊的launch mode flag. 有些launch mode只能用manifest指定, 有些launch mode只能透過intent指定, 有些則都可以. 既然呼叫者可以指定, 被被呼叫者也能指定, 那是否會產生衝突呢? 答案是不會的. 透過intent下的launch mode具有較高的優先權.

1. 在manifest設定activity的launchMode屬性

(1) "standard" (the default mode)
- 每次這個activity被喚起時, 系統都會產生一個新的instance並且其將歸屬於把它喚起的那個task. 具有這種屬性的activity可同時有多個instance存在於系統中, 這些instance能屬於同一個或不同的task.

(2) "singleTop"
- 這個activity被喚起時如果已有instance被放在此task的back stack最上方, 系統將不會產生新的instance而是用onNewIntent()把原來的instance叫起來. 若沒有的話系統會產生一個新的instance. 具有這種屬性的activity也可同時有多個instance存在於系統中, 這些instance能屬於同一個或不同的task.


(a) 喚起launch mode為"standard"的activity D
(b) 喚起launch mode為"singleTop"的activity D
(c) 喚起launch mode為"singleTop"的activity B

(3) "singleTask"
- 這個activity同時間只會有一個instance存在於系統中. 當這個activity被喚起時, 如果已有instance存在於某個task, 那系統將不會產生新的instance而是用onNewIntent()把原來的instance叫起來. 若沒有的話系統會產生一個新的instance並且將其歸屬於此新的task.


(要注意的是: 屬性為"singleTask"的Activity Y被叫起, Task B也因此被叫到前景, 在使用者按BACK鍵後, 繼續在前景執行的還是Task B.)

(4) "singleInstance".
- 跟singleTask大致上相同. 唯一的差別在於這個activity的instance所存在的task中只能有instance. 這個activity之後喚起的activity的instance會歸屬於其他的task.

2. 透過intent加上flag設定

(1) FLAG_ACTIVITY_NEW_TASK: 和singleTask行為相同

(2) FLAG_ACTIVITY_SINGLE_TOP: 和singleTop行為相同

(3) FLAG_ACTIVITY_CLEAR_TOP
- 如果被喚起的activity已有instance存在目前的task中, 則所有在back stack中比此instance新的activity將會被移除. 故此instance將會收到onNewIntent()並開始運作.

其他可設定的特性

[6] Activity Attributes

其他可以在manifest中設定的屬性
-taskAffinity
-launchMode
-allowTaskReparenting
-clearTaskOnLaunch
-alwaysRetainTaskState
-finishOnTaskLaunch

ref:
1. Tasks and Back Stack
2. Activities

Tuesday, May 17, 2011

天兵的紐西蘭南島成長日記 (2) 紀念品們



Merino羊毛內衣: 白/黑
是長輩指定購買的商品,
本來以為在綿羊滿街跑(誤)的紐西蘭要買個羊毛內衣應該是易如反掌啊!
沒想到也就只有在Queenstown的兩間紀念品店看到而已.
其他地方都沒發現要不然就是賣羊毛毛衣=.=

羊毛圍巾
在Aotea Souvenirs買的.

Kiwi桌巾
也是在Aotea Souvenirs買的,
不過在一般的商店也有看過,
這一系列的桌巾有很多圖案像是企鵝,綿羊等等
最後挑了Kiwi的啦!

綿羊油身體乳
綿羊油身體乳就比較好買了,
Four Square也有賣.
有兩三個牌子我挑的是包裝上綿羊最蓬鬆最可愛的XD
這個我還在紐西蘭的時候就開始用了,
覺得蠻滋潤的味道也不錯.

Feijoa牛奶巧克力
Feijoa是個很酷的水果!
吃起來質地很像芭樂但是又有檸檬的香氣,
不過不知道包在巧克力裡面會是什麼樣的滋味啊!
在Christchurch機場買的.

奇異果茶包
也是在Aotea Souvenirs買的,
三種口味分別是奇異果, 奇異果檸檬, 奇異果蜂膠.
還不知道好不好喝 囧

Belvedere Vodka雪樹伏特加
我弟指定的,
在桃園機場買低.

3D卡片
這個是在Franz Josef Glacier Hot Pools購買的XD
泡完熱呼呼的池子離開前不小心瞥見就失心瘋的買了.
薄木頭版上有割線可以拼成立體的東西.
一個是Skiwi超有梗. 另一個是毛利的圖騰.

書籤
在皇家信天翁中心買的.
不過在其他地方也是有.
買了信天翁, 海豹跟黃眼企鵝三種.

天兵的紐西蘭南島成長日記 (1) 行程整理

=第一天=

1. Christchurch
- Christchurch機場
- Omega租車公司

2. Ashburton
- lunch: MacDonald {1/4磅吉士漢堡x2+熱拿鐵}


3. Oamaru
- 藍企鵝保護中心(Blue Penguin Colony)

- Oamaru YHA

- dinner: {沙拉+微波雞肉捲+淡菜+柳橙汁}


=第二天=

1. Oamaru
- breakfast: {麵包+柳橙汁}
- 白起司工廠(Whitestone Cheese)


2. Lake Tekapo
- lunch: 翠湖軒糖醋里肌午餐盒
- Lake Tekapo


3. Lake Pukaki
- Mt Cook Salmon Factory

- Lake Pukaki


4. Mt Cook
- Mt Cook YHA
- dinner: {煎牛肉香腸+炒洋菇+柳橙汁}

=第三天=

1. Mt Cook
- breakfast: {火腿起司三明治+熱紅茶}

- Hooker Valley

- lunch: {火腿起司三明治}

2. Lake Tekapo
- Mt John

- dinner: Kohan {鮭魚洞+煎牛肉+白飯+味噌湯}

- Lake Tekapo YHA


=第四天=

1. Lake Tekapo
- breakfast: {麵包搭Nutella和奇異果醬+紅茶}
- 牧羊人教堂(Church of the Good Shepherd)


2. Moeraki
- lunch: {火腿起司三明治}
- Moeraki rock


3. Otago peninsula
- 皇家信天翁中心(Royal Albatross Centre)

- Sandfly Beach


4. Dunedin
- Hogwartz BBH
- dinner: {白酒淡菜義大利麵+牛排+義式蔬菜湯}


=第五天=

1. Dunedin
- breakfast: {火腿起司生菜漢堡}

- Otage museum

- lunch: {火腿起司生菜漢堡}
- Otago University


2. Otago Peninsula
- 皇家信天翁中心(Royal Albatross Centre)

- Allen's Bay Beach


3. Dunedin
- Hogwartz BBH
- dinner: {煎紅鱈+炒洋菇+玉米濃湯}


=第六天=

1. Dunedin
- breakfast: {火腿起司三明治}

2. Gore
- lunch: {火腿起司三明治}


3. Te Anau
- 螢火蟲洞(Glowworm Caves)

- Te Anau Lakeview Holiday Park

- dinner: {茄汁臘腸義大利麵+炒蛋}


=第七天=

1. Te Anau
- breakfast: {火腿起司三明治}

2. 米佛峽灣(Milford Sound)

- lunch: {火腿起司三明治+水煮蛋}
- Lake Mirror


3. Te Anau
- Lake Te Anau


4. Queenstown
- Lake Wakatipu

- Queenstown center YHA

- dinner: Fergburger {Fergburger漢堡+薯條搭BBQ醬}


=第八天=

1. Queenstown
- breakfast: {火腿蛋三明治}


2. Glenorchy
- Lake Wakatipu


3. Queenstown
- 纜車(Skyline Gondola)

- lunch: {牛肉鹹派+檸檬馬芬+熱巧克力}

- Lake Wakatipu

- Queenstown center YHA
- dinner: {泡菜泡麵+牛排+Feijoa}


=第九天=

1. Queenstown
- breakfast: {火腿起司三明治}


2. Arrowtown
- Arrowtown center


3. Kawarau
- 高空彈跳(Bungy)


4. Gibson
- 酒莊(Gibson Valley)


5. Cromwell
- Cromwell

- old Cromwell


6. Wanaka
- Puzzel World

- Lake Wanaka

- Wanaka Bakpaka BBH

- dinner: {烤雞+奇異果+Kiwano}


=第十天=

1. Wanaka
- breakfast: {火腿起司三明治+麵包沾Nutella}

- 高空跳傘(Skydive)

- lunch: {火腿起司三明治}
- Lake Wanaka

- Lake Hawea


3. Franz Josef
- Franz Josef YHA

- dinner: {洋蔥蘑菇炒蛋+茄汁臘腸義大利麵}


=弟十一天=

1. Franz Josef
- breakfast: {火腿起司三明治}
- 半日冰河健行(Half-day Glacier Hike)

- lunch: {火腿起司三明治+水煮蛋}
- Glacier Hot Pools

- dinner: {奶油花椰菜義大利麵+茄汁臘腸義大利麵+牛排+涼拌花椰菜+奇異果}


=第十二天=

1. Franz Josef
- breakfast: {鮪魚洋蔥三明治}


2. Hikitika
-Hikitika Town Center

- National Kiwi Center


3. Punakaiki
- Paparoa Nation Park: 鬆餅岩(pancake rocks) and 風洞(blowhole)


4. Greymouth
- Global Village BBH

- dinner: {牛排+太陽蛋+培根花椰菜義大利麵+奶油雞湯}


=第十三天=

1. Greymouth
- breakfast: {煎培根+太陽蛋}


2. Arthur's Pass
- 遊客中心(Arthur's Pass Visitor Center)

- Arthur's Pass

- lunch: {熱狗起司漢堡}

3. Melton
- 羊駝農場(alpaca farm)


4. Christchurch
- North Hagley Park

- Old Countryhouse BBH

- dinner: Nando's {烤雞腿套餐+雞肉漢堡}


=第十四天=

1. Christchurch
- breakfast: {麵包搭Nutella+紅茶}
- omega car rental
- 機場


2. Singapore
- 烏節路(Orchard) 義安城 釀豆腐

- 機場

- 亞坤


最後附上的是這個旅程中我最喜歡的一首歌: Bada Bada by Joanna Wang