About Me
星期三, 11月 19, 2008
Java RMI 實作
星期四, 10月 16, 2008
Springframework: wrap up
1. Bean DI:
- look up method
2. MVC:
- HandlerMapping: 用Bean Name, 用Simple Url mapping(support wildcard) or ControllerClassNameHandlerMapping (移掉controller,變*)
- Controller: AbstractCommandController, SimpleFormController (會產生FormBean), 直接幫你forward到view的controller, 同時提供多個action的Controller
- View: ResourceBundle View, InternalResourceView, 可搭配layout framework如Tiles, SiteMsh
- Interceptor
3. AOP - Cross-cutting concerns, apsect, advice, advisor(advice + pointcut), pointcut
- Before, After, Around, Introduction
4. DAO
- PAO是否支援Transaction??
- Hibernate
5. Remote
- RMI
- Web Service
- EJB
星期三, 10月 15, 2008
Springframework: AOP
1. Terms:
Cross-cutting concerns => Aspect => Advice
Pointcut => Jointpoint
Target, Weave
2. AOP:
應以interface為優先,可直接使用 reflect.Proxy
對Class則必須改用CGLIB產生子類別成代理
3. 實作:看筆記
星期一, 10月 13, 2008
Springframework: MVC
Application Controller
1. Action Handler:
- SimpleUrlHandlerMapping, BeanNameUrlHandlerMapping, ControllerClassNameHandlerMapping
- 多個HandlerMapping由Order決定apply順序
2. View Handler
- ResourceBundleViewResolver: 用key找到 resource bundle properties file, 再到裏面找view
- InternalResourceViewResolver
Multiple view => OK
Page Controller
1. Controller interface
2. AbstractController
3. AbtractCommandController
4. SimpleFormController: formView, successView, commandName (在自動處理過程中有用到formbean的地方都用這個name), commandClass
5. Validator: Error Key=> MessageCodeResolver
在view上要顯示錯誤訊息則需搭配 spring form
星期三, 9月 24, 2008
jQuery
星期二, 9月 23, 2008
星期一, 9月 22, 2008
Book Study: Javascript: the Good part - Chaptor 5 Inheritance
1. 記得Function.method模擬 new的code
2. 繼承: new Parent(), 然後把prototype指向該obj
3. 用物件方法傳參數
4. 物件的繼承
5. 利用closure創造帶有private function, member field的 Class
星期日, 9月 21, 2008
Book Study: Javascript: the Good part
1. prototype & constructor的概念
2. closure
3. apply call
4. package
5. console.log
6. 一般function的this是指向global => 改用that
7. JSLint
8. 當constructor的function通常把第一個字母大寫,已避免誤用
9. function中會自動產生arguments物件
10. Exception
11. prototype的method 用來create method
- 透過prototype擴充method
12. JavaScript
- no block scope
- function scope
13. 例用closure創造Module => 達到 private member variable以及security的功能
14. Curry, 透過closure, 將原來的function加料
15. 透過closure記住之前計算過的東西
16. === , !==
星期一, 8月 11, 2008
Effective Java - Chapter 11 Serialization
defaultReadObject/defaultWriteObject
- Serialization
- serialized form and UID
- another constructor
- 提供parameterless constructor以便subclass可以serializable, 用AtomicReference確保subclass有正確的initiate - Use a custom serialized form
- don't use default without consideration
- 只寫出logic representation
- 通常custom會較快
- always invoke defaultReadObject/defaultWriteObject
- Hashtable的default form甚至會error !!
- always use serial version UID - Write readObject methods defensively
- Use enum to instance control
- 當需要自己寫readObject/writeObject時, 可考慮使用Serialization Proxy
Effective Java - Chapter 10 Concurrency
- Use Synchronize access to shared mutable data
- synchronize除了用來防止同時更改資料,也是用來保證會讀取到最新資料
- synchronize要設在get與update
- volatile - 不要過度使用Synchronize
- alien => 只synchronize必要的部份, synchoronize越少越好 open call
- 使用CopyOnWriteArrayList/Set
- 讓client決定是否synchronize, 除非你自己有把握做的更好
- static field一定要synchronize - Prefer executors
- ExecutorService提供許多好用的機制 - Prefer concurrency utilities to wait and notify
- ExecutorService
- Concurrent collections
- CountDownLatch / Semaphore, CyclicBarrier / Exchanger
- The standard idiom for using the wait method
- Private lock object idiom - Any program that relies on the
thread scheduler for correctness or performance is likely to be nonportable - thread groups are obsolete
Effective Java - Chapter 6 Enums & Annotations
- Use enums instead of int constants
- instance controlled
- a generalization of singletons
- 可提供各種物件化的programming
- enum的method多被為private or package private
- constant-specific method implementations
- strategy enum pattern
- valueOf, toString(), fromString() - Use EnumSet, EnumMap
- Annotation
- Retention
- Target
- Parameter - Override
- Mark interface
星期五, 8月 01, 2008
Effective Java Chapter 9 Exception
1. Use exception only for exceptional conditions
- Good API design 要提供讓client檢查狀態的API
2. checked exception and runtime exception
3. 盡量避免不必要的checked exception
- Client方便
- 可將checked轉成 unchecked
4. Favor use standard exception
- IllegalArgumentException
- IllegalStateException
- NullPointerException
- IndexOutOfBoundException
- ConcurrentModificationException
- UnsupportedOperationException
5. Throw exceptions appropriate to the abstraction
- exception translation
- exception channing
6. Document all excepion
7. Include failure-capture information in detail message
- 包裝有用的資訊
- 需要自己改寫Exception
8. 維持Exception的原子性
- Object immutable
- rollback
- check first
9. Don't ignore it
星期四, 7月 31, 2008
Effective Java Chapter 8 General Programming
1. Minimize the scope of local variables
- 盡量在用到的地方才宣告
- 每個變數都要有initializer, 沒有代表你還不需要宣告
- Prefer for to while
- 讓每個method的功能盡量單純
2. Prefer for-each to for
3. Know and use the libraries
- don't reinvent the wheel
- java.lang / java.util / java.io
- java.util.concurrent
3. Avoid float and double if exact answers are required
- 用BigDecimal, int or long
4. 盡量使用primitive
- 使用boxed primitives時機: Collection keys, parameter types, reflective method invocation
5. Avoid strings where other types are more appropriate
6. 不用把String 相加
7. Refer to objects by their interfaces
- 除非是沒有interface 如value class
- or interface沒有定義要用的method
- by abstract class
8. Optimize judiciously
- 如果不清楚的話,不要亂做optimization
- 好的程式架構比performance重要
9. Naming convention
10. Prefer interface to reflection
星期二, 7月 29, 2008
Effective Java - Chapter 7 Method
1. Check parameters for validity
- For exported API: check parameters first
- IllegalArgumentException, IndexOutOfBoundsException, NullPointerException
- For unexported API: Assertion
- 小心不要讓check parameters影響performance
- Document it
2. Make defensive copies when needed
- 確保物件不會被傳進來的人改掉
- 不是Final class不要用clone
- return 物件最好也用defensive copy
- 最好是immutable
3. Design method signatures carefully
- Class不要有太多method
- Method不要有太長的parameters < 4
- 方法: break it, Helper, Builder
- 參數favor interfaces over classes
4. Use overloading judiciously
- 使用哪一個overload method是在compile時決定的
- Overriden method則是在run-time決定的
- 盡量不要使用參數數量相同的overload method
- 或是兩個決定不相容的參數也可
- 小心autoboxing/autounboxing
- 常因為class evolusion導致產生兩個互通參數的overload method, 只要的做的事相同即可
5. Use varargs judiciously
- 用 (int first, int ... remain)可以省去檢查參數的麻煩
- 不要把原本用array傳參數的改成 varargs,會出錯
- performance issue
6. Return empty arrays or collections, not nulls
- client可以不用檢查null, 避免錯誤
7. Document for all exposed API elements
- summary description
- precondition, postcondition
- @param, @return @throws
- Thread safety
- Serialization
- Class for inheritance
- @code, @literal
- Generic ,Annotation, enum
星期日, 7月 13, 2008
Effective Java - Chapter 5 Generics
- Dont' use raw type in new code
- Eliminate unchecked warnings- Always use the Suppress-Warnings annotation on the smallest scope possible
- Prefer lists to ararys
- Arrays check type at runtime, generics check type at compile time
- type reified / type erasure
- can't create generic type array => type not safe because of type erasure
- type erasure: 不能直接 new E[], new List[], new List [] (non-reifiable type)
因為runtime沒辦法保證Array裡面存在一致的物件 - Favor Generic Type
- 盡量使用Generic Type,而不要讓Client端自己cast - Favor Generic Method
- type inference
- for static factory method
- recursive type bound - Use bounded wildcards to increase API flexibility
- PECS
- 如果Signature中只有一個type parameter, 就用wildcard - Consider typesafe heterogeneous containers
星期一, 6月 30, 2008
Effective Java - Chapter 4 Classes and Interfaces
1. Minimize the accessibility of classes and members
- 可以宣告為越私有就越私有
- 只屬於某個class會用到的class就用inner class
- member 盡量為private
- subclass不可以比superclass更private
- interface一定是public
- instance fields 一定不可以是 public
- static final fields也不可以是public, 因為object refer到的object會被改到
2. In public classes, use accessor methods, not public fields
3. Minimize mutability
- 使一個class immutable
no modify method, can't be extended, all fields final, instance fields是object reference 要小心指到的物件不會被改
- 沒有thread, synchronization的問題, 可以被share
- 可以拿來被當做常數使用
- 在static factory可以cache, 因為同一個value的物件一定是唯一的
- 會有performance的問題
- mutable companion class, 就像String and StringBuilder
- 用 private constructor 而不要用final
- Serializable要注意 readObject / readResolve
- 如果不能完全做到immutable, 也要盡量減少可以被修改的fields
4. Favor composition over inheritance
- 只有在同一個package or 有特別說明使用來被繼承的class, 才去繼承
- 缺點
1. 違反 encapsulation, 因為要說清楚人家才好繼承
2. 容易因為superclass修改就傷害了繼承的class, 甚至可能不能compile
- 只有確定是 is-a 關西, 才考慮用繼承
5. design and document for inheritance or else prohibit it
- 必須說明有哪幾個methods有用到overridable methods
- 說明這個method應該如何被override的說明
- 自己寫個subclass測試看看
- Constructor不可以使用overridable method
- Cloneable & Serializable 不繼承
6. Prefer interfaces to abstract classes
- 現有的class較容易改寫成某個interface
- interface可以多個
- 最好是 interface + abstract class => skeletal implementation
7. Use interfaces only to define types
- 不要用來定義 Constants
8. Prefer class hierarchies to tagged classes
- 同一個class不要同時可以變成兩種物件
9. Use function objects to represent strategies
10. Favor static member classes over nonstatic
- static member class
- non-static member class
- anonymous inner class => 一定要繼承或是implement某個interface
- local classes
星期日, 6月 22, 2008
Effective Java筆記 - Chapter 3
宣告 @Override 確定有正確Override
1. equals
- Reflexive
- Symmetric
- Transitive
- Consistent
- not equals to null
- 使用composition, 不用extends
- 先測試 instance of
- 不要依靠unreliable resources
- 測試最顯著的fields
2. Always override hashCode when overriding equals
- same object return the same hash code
- equal object must have equal hash codes
- two different object return different hash code
3. Aways override toString
4. Override clone judiciously
- implement Clonable
- 如果只有 primitive fields, 可直接呼叫 super.clone()
- 物件則只會clone reference pointer, 需特別處理
- 不可以有finalize object
- 需留意clone時的performance
- 提供另外的copy constructor
- 盡量不要用
5. Consider implementing Comparable
- 與equals類似的性質
Effiective Java筆記 - Chapter 2
1. Consider static factory method instead of constructors - static factory method 可以使用比較有意義的名字
使用constructor只能使用不同的參數來宣告多個constructor, 使用者很難分辨
- 可避免產生不必要產生的物件, 易於控制物件的產生
- 可以回傳subclass物件, 易於實現Service Provider
缺點
- 不提供constructor無法被繼承
- 長相跟其他static method沒有區分
2. Consider a builder when faced with many constructor parameters
3. Enforce the singleton property with a private constructor or an enum type - 小心serializable
4. Enforce noninstantiability with a private constructor - For a group static methods and fields
5. Avoid creating unnecessary objects - 不要new immutable object, 如String , Boolean
- 重複使用可重複使用的物件
- 避免不必要的autoboxing
6. Eliminate obsolete object references - Class 管理自己的記憶體即可能產生memory leak
- 盡量縮小每一個變數的scope
- 善用WeakHashMap
7. Avoid finalizers
- 使用 try finally 關閉應該關閉的物件
星期日, 3月 16, 2008
Javascript 與Http and XML
1. 建立XML新文件
document.implementation.createDocument() / MSXML2.DOMDocument
load / onload or readyState
2. 利用<xml>建立網頁中的資料庫
3. 利用DOM or XPath操作XML
4. JSON -> 用eval or JSON parser處理 JSON回應
Javascript 與表單 Form / Cookie
Form
- Button tag
defines a group of form elements as being logically related. The browser draws a box around the set of fields to indicate that they are related.<FIELDSET>
Cookie
- IE userData 永存機制
Javascript 與 event
1. 基本事件
- 於HTML attribute以及javascript宣告事件處理
- 留意event handler的範圍
2. DOM Level 2
- 事件會從Document物件往下傳播, 如果標的節點上層任何的祖先節點有註冊一個事件處理器, 則這些處理器也會執行. 由第三個參數決定
- bubble phase又會將事件往上傳遞
- addEventListener() 註冊事件, stopPropagation() 終止往上傳遞
- 可為一個物件註冊好幾個事件
- event
- IE使用不同的界面, event物件為廣域變數
Javascript and image
1. 利用XHTML為HTML增加新的attrtibute
2. 利用 Image.onload 來判斷image是否已經load
3. 利用 new Image() 來進行image preload
4. SVG 與 VML
星期六, 3月 15, 2008
Javascript 與 CSS
1. CSS position的定位類型
static, absolute, fixed, relative
2. CSS box model
margin
border
padding
width
3. Clip 與透明度
4. 操作inline, className and class rule
5. 有closure的應用
星期四, 3月 13, 2008
Javascript
物件
1. 如何建立一個物件
==> var obj = { a:1 , b: 2}
也可以後續再指定屬性
var obj = {}
obj.a = 1
obj.b = 2
2. 如何檢查某個物件是否有某個屬性
if (obj.a)
3. 可以用讀取陣列的方式讀取屬性
obj["a"]
易於用變數的方式去讀取屬性, 讓user input的字串來決定讀取哪個變數
函式
1. 函式可以assign給一個變數, 或是當成參數, 或是寫成不具名 (只用一次)
var f = function() {}
a.sort(function() {} )
var a = ( function() {} ) ()
2. function可以接受用任意個數的參數呼叫, 預設arguments物件可以依序讀取每一個變數
同時可以從arguments取得 callee & caller
3. 以物件的方式傳遞參數, 可以避免寫死參數順序與個數
4. apply & call
如果function中有用到this, 則其對象變成指到o
f.call (o, 1, 2)
==> o.m = f; o.m (1,2,) ; delete o.m
類別
1. 寫的很像function, 不過主要是再初始化內部變數
method 指定在 prototype上
new operator接的function name意思是指定該function為constructor
prototype的指標也會指到該function的prototype指標上
* add on 2008/9/21
- function在生成時,會同時生成prototype and prototype.constructor=自己
- new運算子生成空物件後, 會把空物件直接由function.prototype繼承所有屬性
2. Class variable / method 直接指定在Class上
3. function class( a,b ) { /* ... */ }
4. function body就是constructor也是代表這個class物件
new class() ==> 拿到的就是prototype
星期三, 3月 12, 2008
關於SSL憑證
最近公司又要Launch新的網站
不能免俗的又要申請新的SSL憑證
很奇怪不知道為何每個新的網站都要用這麼不同的domain name
如果可以有點規則的話,就可以申請 Wildcard SSL了
不過到底是沒人想過,還是有人想過但是有其他考量
就不是我這個小工程師可以置喙的了
有鑑於之前都把申請SSL這件事情交給IT
從來沒有好好的SURVEY過
現在跟IT的關係搞的有點糟,而且IT做事感覺不太牢靠
所謂靠山山倒、靠樹樹倒,還是靠自己最好
市面上提供SSL服務的CA還不少
每個CA又提供了不同種類的產品,一時還真不知道該如何比較起
稍微Google了一下
中文的網頁沒啥人再討論,大概只有這幾篇在討論
台幣萬元以下 SSL 憑證選購指南
选择 SSL 证书提供商
國外的則較多
例如 SSL Web Certificate Choices
我稍微歸納重點如下
- 一定要選擇 Single Root CA
- 如果要確認Browser支援度(如IE 5.0以前),選擇歷史較悠久的CA如Verisign, Thawte
- 需要給客戶更強的信賴感,請選用有提供 Extended Validation certificate identification 的廠商如Thawte, 這個憑證可以讓IE7以上的address bar變成綠色

- 如果沒有Browser或EV的考量,選擇便宜的為佳,如 RapidSSL
最後,在申請前,可以上網找一下有沒有特惠價,幫公司省一點荷包也是不錯啦
星期四, 3月 06, 2008
Design Pattern - Template Pattern
Template Pattern
要點 將一個演算法的骨架定義在一個方法中, 而此骨架中應用到的方法定義為abstract, 由次類別決定 (或是由外部傳入的物件行為決定)
如此一來可由次類別或外部傳入的參數物件動態的改變演算法中的某部份
應用 Hook
Design Pattern - State Pattern
State Pattern
要點
程式中因為許多不同的狀態而有不同行為時, 可以將這個狀態所對應的行為封裝
外部使用者只要更換狀態即可以改變行為
Design Pattern - Iterator & Composite Pattern
Iterator Pattern
要點
如果有物件類部包含一聚合的attribute, 需要被瀏覽檢視, 有的物件是用ArrayList or List or Hashtable,
外部使用者必須面對不同的對象處理, 改封裝成Iterator, 可以隱藏內部實際的implementation, 讓使用者面對一致的對象處理
可利用java.util.Iterator
Composite Pattern
要點 讓屬狀結構中的Node與Leaf實踐同一介面, 讓需要瀏覽數的外部使用者可以用一致的方法處理物件
對於互相不支援的method, 可用UnsupportedException 處理
Composite Iterator
用Iterator的方式可以瀏覽一個樹狀結構, 需要紀錄訪問的Node等
設計守則
一個類別應該只據有一個改變的理由
星期三, 3月 05, 2008
Design Pattern - Facade
Facade Pattern
要點
當需要連續呼叫一連串的物件方法才可以完成一個要完成的事, 可以將這一連串包裝成一個method, 以後只要呼叫這個method即可
設計守則 - 極少化, 減少物件中須要認識的物件數, 物件中呼叫的方法必須是
- local method
- 被當作參數傳進來的物件的方法
- local variable的method
- local create的物件的方法
public float get Temp()
{
Theromoeter t = station.getThermometer();
return t.getTemp();
}
優點可減少物件之間的依賴程度, 減低維護成本
缺點是會大量增加包裝物件, 以及降低執行時的效率
Design Pattern - Adapter
Adapter Pattern
要點
與Decorator類似, 但Adapter只轉換, 並不增加功能.
其實也可以直接改寫該物件的界面, 但有可能手邊並沒有原始碼, 或是改寫成本過高.
星期二, 3月 04, 2008
Design Pattern - Command
Command Pattern
要點
如果硬寫, 會需要一連串的if else. 透過Command的界面轉介, 發出請求的物件只要直接呼叫execute, 封裝的Command物件
會自己去處理接收者的執行動作
應用
- Undo - 將執行過的Command紀錄下來放到Queue裡面, 要復原的話, 直接呼叫Command的undo()
- Queue - 拿出物件後直接呼叫execute, 不必管Queue裡面放的是什麼物件
- Log Restore - 將執行過的command封裝紀錄下來, 如果遇到Crash, 直接load Command的execute即可回覆原來的操作
Javascript Closure 的概念與應用
最近讀到了javascript closure
搞得有點一頭霧水,Google了一陣子之後
總算有點瞭解,在這邊做點記錄
- 概念
在函數a之中宣告的內部函數b,此內部函數b可讀取該函數a的區域變數
即使a已經離開他的scope.
function a() {
var i=0;
function b(){
alert(++i);
}
return b;
}
var c = a();
c();c();c();
以上例而言,會得到0,1,2,表示即使var c=a() 結束之後,a的區域變數i仍然持續存在 - 特性
- 不同次呼叫的closure,local變數為個自的,而同次呼叫的則共用
- 使用時要特別注意哪些屬於closure變數哪些不是
- closure變數的值決定於return當時(或是呼叫執行)的狀態(binding value), 而非宣告當時 - 作用
- 可模擬私有變數,因為變數i只有透過b()才可更改
- 當需要一個持續存在的變數時,可以避免使用廣域變數影響命名空間
- 做breakpoint追蹤目前變數情況
- 參考資源
Javascript Closures
http://www.javascriptkit.com/javatutors/closures.shtml
Design Pattern 裝飾者模式
裝飾者模式 (Decorator Pattern)
要點
裝飾者可附加被裝飾者原本的method
Design Pattern - 觀察者模式 Observer Pattern
觀察者模式 Observer Pattern
觀察者實踐同一個界面, 被觀察者須提供register, remove, notify等method.
觀察者向被觀察者註冊, 一但被觀察者發生改變, 即可依序呼叫觀察者的update()
須注意不可依賴呼叫的順序
設計守則
星期一, 3月 03, 2008
陳金鋒退出奧運八搶三資格賽
剛剛才在Yahoo新聞看到陳金鋒確定退出中華隊
心裏其實高興比擔心多一些些
陳金鋒已經三十歲了,為國家付出的也夠多了
實在沒有必要硬撐,也應該要為自己的職業生涯打算
La new可是一年花一千萬在他身上
遲早有一天中華隊必須要習慣沒有陳金鋒的日子
與其晚面對不如早面對
多給機會培養能打大比賽的好手
才不會遇到不能徵召就沒人可打的窘境
希望台灣的球迷們可以給這些國手真正的支持
不論勝負都應該要給予鼓勵
而不是勝了捧上天,輸了罵到臭頭
這樣整個國家才會進步
我們的棒球運動才能成長茁壯
中華隊,加油!
Design Pattern 工廠模式 Factory Pattern
Simple Factory
與Framework類似.
讓高低元件都依賴中間的一個抽象類別
設計守則
- 依賴抽象類別而非實體類別 (不要用new)
- 變數不可以據有具象類別的參考
- 不要繼承一個具象的類別
- 不要override方法
Design Pattern 策略模式 Strategy Pattern
策略模式 Strategy Pattern
用合成的方式提供物件行為, 可以定義為演算法家族封裝起來, 容易互相替換也不易影響使用該演算法的程式
設計守則
- 找出程式中可能需要更動之處, 把他們獨立出來, 不要和那些不須要更動的程式碼混在一起.
- 針對界面寫程式, 而非Implementation寫程式
- 多用合成, 少用繼承
星期日, 3月 02, 2008
極光拍攝方法簡介
這次為了拍極光, 上網找了不少資料, 也翻閱了手邊的書籍
深怕有一個閃失, 會錯失拍攝極光的好機會
不過其實在極光出現的當時, 因為現場實在太冷, 也怕搞太久極光就消失了
根本沒有時間去想那些有的沒的
所幸這次拍回來的極光還算可以看
順便在這裡記下一些心得
1. 裝備
a) 單眼數位相機 - 現場因為氣溫太低, 掛掉很多傳統相機, 但還沒看到數位的掛掉, 所以建議攜帶數位的單眼相機
b) 快門線 - 必備, 用手按快門等拍完應該會結凍, 或是被黏在相機上
c) 腳架 - 不用多說了
d) 備用電池 - 不用多說了, 一組肯定不夠
e) 大光圈鏡頭 - 可以減少曝光的時間, 一方面減少雜訊, 一方面可以減少在戶外冷凍的時間
2. 拍照時的設定
a) 以ISO 400為佳, 我的*istDS大概只能用ISO400, 如果手上是 D3之流, 就不用管我說啥了
b) 光圈開到最大, 手動對焦至無限遠
c) B快門, 時間依極光亮度及ISO而定, 約一分鐘上下應該OK
d) 關掉NR, 否則拍一張會等很久才可以在拍下一張, 回來自己在用軟體做NR
3. 其他
有人會說盡量不要戶內外進進出出, 以免相機結霜故障
不過在當場應該是很難一直待在戶外
我大概拍個三五張就得回小屋取暖
一進到戶內相機產生水滴時盡量不要在開機
所幸相機有撐住, 供大家參考
2008 新年 阿拉斯加極光之旅 Alaska Aurora Trip
趁著過年幾天的年假,加上偷偷請了三天假
跟女友一起到阿拉斯加走了一趟,想去看看傳說中的極光是甚麼樣子
出發之前看著世界各國紛紛發生大雪災情,實在非常擔心這次的旅行是否會泡湯
到了當地果然遇到當地的寒流,遇到了不知道是幾年來最冷的天氣
最低到了-46度C,實在很難用言語說出那倒底有多冷
不過幸運的是大部分的行程還堪稱順利
只可惜因為鐵道上有其他車輛發生故障,沒坐到"北極特快車"
不多囉唆,看照片吧
機司:Pentax *istDS + DA 16-45 + DA 55-200 + 35 F2
Easy Showily
1. 中正機場的Hello Kitty候機室
一過海關便迫不及待的前往傳說中的Hello Kitty候機室,果真名不虛傳,一整個可愛夢幻到不行

2. Welcome to Alaska !! 真是一整個冰天雪地的

3. 就是那個光!花這麼多錢,全為了這幾道綠光啊






拍完之後相機變成這樣了,叔叔有練過,小朋友不要學啊
4. 今天跑去玩狗拉雪翹,每隻狗都好有活力啊,不過其實拉我們的小狗到最後好像有點沒力快拉不動了,該減肥啦XD

5. 聖誕老公公的家,不知道為什麼這裡也有,聖誕老公公不是住芬蘭嗎?

6. 在黃金心臟公園前的紀念銅像
剛好遇到年度的Yukon Quest狗拉雪翹大賽!每年從這裡出發要跑到加拿大的白馬鎮,全程一千六百公里, 要跑一個禮拜哩
內閃不知道打到哪去啦XD,每隻狗都好興奮好有活力啊
出發啦,加油吧,大家看照片的同時他還在路上跑!(追焦追不到XD)
7. 本來要從Fairbank搭景觀火車回Anchorage的,可惜 ... 無緣的北極特快車

8. 這天來到Anchorage北方的小鎮Talkeetna,真是個很有特色很溫馨的小鎮
這裡的房子加上厚厚的積雪,真的很像薑餅屋喔


9. 可愛的北極熊 ~~~ 可惜是在動物園裡的 ... 下次要來看真的

10. 峽彎冰河遊船,本年度第一班!夠幸運了吧,哈,之前都因天氣不好未開, 不過好晃啊,一整個暈到不行,有機會來的話一定要吃個暈車藥
看到殺人鯨!
看到海豹!看起來好像一朵朵香菇,哈
到這裡整個旅行就告一段落了,短短的八天六夜真令人意猶未盡,下次在來囉 ~~~

