2010年11月24日

建立第一個Android應用程式


透過前文『於Ubuntu 10.04建置Android開發環境』,已將Android的開發環境建置完成,本文將示範如何建立第一個Android應用程式,至於第一個應用程式,不免俗還是HelloWorld,XD。

1.切換eclipse的perspective
  • 1.1 eclipse執行時的預設perspective為Java EE,將其切換為Java。
  • Main Menu -> Window -> Open Perspective -> Java
    
2.建立AVD(Android Virtual Device)
  • 2.1 Android應用程式必須於Android平台手機或AVD模擬器上方能執行,在此建立一個AVD以執行開發的應用程式。
  • Main Menu -> Window -> Android SDK and AVD Manager -> Virtual Devices -> New
    
  • 2.2 參數設定說明
    • Name:AVD的名稱,可自行命名。
    • Target:使用的Andorid SDK版本。
    • SD Card:設定SD Card的記憶體大小為128MB。
    • Hardware:透過New按鈕,給定裝置的記憶體大小為128MB,預設為96MB。


3.新增Android Project
  • 3.1 新增步驟
  • Main Menu -> File -> New -> Android Project
    
  • 3.2 參數設定,請參考下圖,其中,Package Name請加入網域名稱命名,避免應用程式上傳至Market時,發生名稱重複之問題。

  • 3.3 專案新增完成後,若產生Build Path錯誤,請將gen底下的R.java刪除,程式會自動重建R.java。

4.執行HelloWorld應用程式
  • 4.1 執行步驟
  • Main Menu -> Run -> Android Application
    
  • 4.2 執行結果

本範例尚寫到任何程式,就完成HelloWorld應用程式,讀者是否充滿信心,XD。

2010年11月15日

『於Ubuntu 10.04建置Android開發環境』筆記


筆者的Android開發環境建置,主要是參考『[新手完全手冊] 建立 Android App 開發環境於ubuntu 10.04』(Milochen's Blog)文章中的步驟,Milo Chen的解說很詳細,讀者可連結過去參考,在此只紀錄本人的建置流程。

1.切換權限
  • 1.1 Milo Chen建議以root權限,建置開發環境
  • 1.2 權限切換指令
  • $ sudo su
    
2.確認Ubuntu安裝的版本與位元
  • 2.1 確認安裝版本指令
  • # lsb_release -a
    
  • 2.2 確認版本位元指令
  • # getconf LONG_BIT
    
3.根據Ubuntu的版本與位元下載軟體
  • 3.1 JDK  (筆者下載:jdk-6u22-linux-x64.bin)
  • 3.2 Android SDK  (筆者下載:android-sdk_r07-linux_x86.tgz)
  • 3.3 eclipse  (筆者下載:eclipse-jee-galileo-linux-gtk-x86_64.tar.gz)
4.將下載的三項檔案移至/opt/下

5.解壓縮檔案與更改權限
  • 5.1 JDK
  • # chmod a+x ./jdk-6u22-linux-x64.bin (chmod更改檔案存取權限)
    
    # ./jdk-6u22-linux-x64.bin
    
  • 5.2 Android SDK
  • # tar xvf android-sdk_r07-linux_x86.tgz (tar解壓縮指令)
    
  • 5.3 eclipse
  • # tar -zxvf eclipse-jee-galileo-linux-gtk-x86_64.tar.gz
    
    # mv eclipse eclipse-x86_64
    
6.安裝ia32-libs
  • 6.1 Android SDK為32位元,若於64位元系統執行32位元執行檔,須安裝ia32-libs
  • 6.2 安裝指令
  • # apt-get install ia32-libs
    
7.建立連結
  • 7.1 建立eclipse內的JRE連結
  • # cd /opt/eclipse-x86_64
    
    # ln -s /opt/jdk1.6.0_22/jre ./jre
    
  • 7.2 設定Android-SDK Tool和JDK bin的路徑
  • # export PATH=/opt/jdk1.6.0_22/bin:/opt/android-sdk-linux_x86/tools:${PATH}
    
8.啟動eclipse
  • 8.1 啟動指令
  • # GDK_NATIVE_WINDOWS=1 /opt/eclipse-x86_64/eclipse
    
  • 8.2 建立eclipse啟動檔,可將底下內容儲存為一個 ***.sh ,爾後以root權限直接執行***.sh,即可開啟eclipse,無須再入輸入長串的指令
  • #!/bin/sh
    
    export PATH=/opt/jdk1.6.0_22/bin:/opt/android-sdk-linux_x86/tools:${PATH}
    
    GDK_NATIVE_WINDOWS=1 /opt/eclipse-x86_64/eclipse
    
9.設定android eclipse環境
  • 9.1 初次開啟eclipse,會顯示Welcome畫面,於Welcome標籤按『X』,即可關閉。
  • 9.2 安裝Android Developer Tools Plugin
  • Main Menu -> Help -> Install New Software
    
    • 9.2.1 點選『Add』按鈕
    • 9.2.2 Name欄位輸入『AndroidDeveloperTools』(可任意名稱)
    • 9.2.3 Location欄位輸入『https://dl-ssl.google.com/android/eclipse/』
    • 9.2.4 勾選全部選項進行安裝
  • 9.3 安裝完成後,點選『Restart』重新啟動eclipse。
  • 9.4 設定 Android SDK Location
  • Main Menu -> Windows -> Preference -> Android
    
    • 9.4.1 SDK Location欄位設定『/opt/android-sdk-linux_x86』
  • 9.5 安裝Android SDK or API
  • Main Menu -> Window -> Android SDK and AVD Manager -> Avaliable Packages
    
    • 9.5.1 勾選全部選項進行安裝
以上步驟已完成Android開發環境的建置,後續將介紹如何於 eclipse 中建立 Android 新專案。

2010年11月14日

如何於ubuntu 10.04收聽廣播

以前於windows系統是透過mediaU收聽網路廣播,但最近對Ubuntu越用愈上癮,今天開機也直接進入Ubuntu系統,照以往方式開啟網路廣播,但系統卻無法自動取得mmsh套件(XD),這時只能請教Google大神,在凍仁的Ubuntu筆記(有豐富Ubuntu資料的網站)找到解決的方法,參考文章為Can't find MMSH codeces for Chrome on Ubuntu

解決mmsh問題步驟

  1.  新增套件
sudo vi /etc/apt/sources.list (以vi編輯器開啟sources.list )
.....
deb http://packages.medibuntu.org/ maverick non-free free # Media Code(將此行加入至sources.list檔案內的最底)

  2.  新增認證金鑰
sudo apt-key adv --recv-keys --keyserver wwwkeys.eu.pgp.net 0C5A2783

  3.  安裝非自由的解碼引擎
sudo aptitude install non-free-codecs
在執行此步驟,Terminal可能會出現『無法和 tw.archive.ubuntu.com:80 (140.112.8.139) 連線』的錯誤訊息,求助google大神,其可能原因為tw.archive.ubuntu.com已停止提供服務,可透過修改『軟體來源』解決此問題,於『系統->管理->軟體來源->原始碼下載至』進行修改(筆者更換為:mirror.nttu.edu.tw/ubuntu)。
重新再次執行指令,即可執行套件更新。

修改原始碼下載來源


透過mediaU收聽廣播


透過安裝Google Chrome的Taiwan Radio Tuner套件,收聽廣播

2010年11月11日

『海削小人』削鉛筆機

前天看到博客來天下系列書籍有5折優惠,就忍不住開始將書放入購物車,等把有興趣的5折書,下訂完後,金額已經快900元了,不小心又看見滿1499元,就可以獲得『海削小人一筆』削鉛筆機,克制不住內心的渴望,開始連7折、79折的書都開始下訂,此時博客來又寄來一封信,滿2000元送200元購物金,為了得到購物金,最後的結帳金額為2170元(囧),共計九本書。

下訂完,就期待這包裹會有多大呢,昨天下班就趕緊領錢去家裡附近的7-11取貨,以下是我跟店員的對話。
  • 金髮店員:拿貨嗎?(不要問我為什麼店員會記住我的名字,因為我平常就很敗家)
  • 我:恩。(OS:拿貨?這店員背景好像不單純)
  • 金髮店員:總共2170元。
  • 我:掏錢付款。
  • 金髮店員:收錢結帳。
  • 我:整理錢包當中。
  • 金髮店員:要拆開嗎?
  • 我:啥?
  • 金髮店員:幫你拆開?
  • 我:不用,謝謝。(OS:拆開是要驗貨嗎,果然背景不單純(XD))

九本書的包裹,果然博客來不是泛泛之輩阿,箱子尺寸很齊全。



九本書的真面目(沒拍好、照片糊了)



這一切都是為了他,小人退散吧(XD)


常買書的舉動,相對以前是有比較收斂了,還記得有一次,取完書後,在包裹背後發現一張紙條,是7-11女店員,想跟我當朋友,為了證明我不是嘴泡,我還有把紙條留著(XD),不過從那之後我就很少在博客來買書了,直到最近那家店,店長、店員都換新後,才又開始買書,沒想到名字又被記住了,我該低調了(XD)。

2010年11月10日

「Ubuntu 10.04」使用體驗

最近嘗試使用Ubuntu(Linux)作業系統,真的有些愛不釋手,圖形化的安裝介面,降低了安裝的門檻且簡化了流程。Ubuntu安裝完成後,其內含的應用程式也足夠因應平常所需,PDF 檔案可直接開啟瀏覽,OpenOffice 文書軟體已安裝在內,美工、影音、網路等項目也有豐富的應用程式支援,須自行安裝的應用程式頗少,且這些應用程式都是「Free」的。

筆者是將Ubuntu 10.04版安裝在ThinkPad X200筆電,採用Wubi安裝方式,將Ubuntu與Windows 7 安裝於同一磁碟區,無須分割新的磁碟區且日後若要將Ubuntu移除,也可直接透過Windows介面將其移除,非常人性化的安裝方案,頗適合初學者。

令人擔心的硬體驅動方面,系統完全支援,無須手動安裝,網路連接的方式與Windows 7同樣便利,應用程式的使用,也相似於Windows環境的操作,學習曲線並不高,若對電腦的使用,僅是用於上網、娛樂、簡單的文書處理與影像編輯等,Ubuntu會是不錯的作業系統選擇。

  • 簡潔的作業系統桌面

  • 上網、MSN無國界

  • 文書處理非難事

2010年11月9日

『槓桿學習全攻略』讀後感




槓桿學習全攻略
時間最少成效最大的終極學習術

作者:本田直之
譯者:詹慕如




你以為出了校園就可以不用再學習了嗎,那你可能得失望了,學校裡的學習,充其量只是用以取得進入職場的門票,而真正的學習這時候才正要開始,你的付出與努力,將決定你往後的成就與生活。

學校裡的課程,對於學習的項目提供了明確的方向,學習的成果也具有評量的基準,各個課程也有結束的段落;反觀,於職場或社會的學習,就必須仰賴自我的抉擇與實踐,讓自身時時刻刻保持競爭力並適應變化迅速的環境,而不致慘招淘汰。

工作就已經夠讓人勞累了,那如何在身心俱疲的下班時間及難得的假日時光,進行學習呢,且又該如何選定學習的方向及擬定學習的策略呢,作者『本田直之』於本書『槓桿學習全攻略』,以槓桿的概念與作法,提供了不錯的建議與作法。

不論任何的學習,作者都建議,於學習的起初都必須確立學習的目標,而目標的訂定必須盡量具體化或數字化,像是業績在一年內提升多少百分比,或是三個月內能與外國人進行交談等目標,目標訂定後,則以設定的時間,以倒逆的方式進行時程的規劃,並盡量有循環複習的可能,以强化記憶。

作者於書中也強調在確立學習方向,必須先客觀省思現有的條件,並以能實際應用為目的,千萬別想什麼都學或訂下不切實際的目標,有輸出才能彰顯輸入的價值,透過體驗小成果的累積,才能持續不斷的學習。

書中有些觀念或技巧都值得學習的,並不因時間的更迭,而過時或不適用。在這資訊多元與情報泛濫的時代,資訊取得已不是問題,而是如何篩選有用的資訊與情報,才是必須學習與關注的,透過相關書籍的閱讀,以汲取前人的寶貴經驗,可減少自我摸索的時間與錯誤的嘗試,藉融入各方的優點,以建構自身的學習法則。

2010年11月5日

Mate初探 – Part2


本文將導入Mate Framework改寫『Mate初探 - Part1』的示範例。

專案應用程式架構
  • 應用程式架構分為business(models)、maps(controllers)、views三個層面,而events package用於存放自訂事件。

Event
  • 使用者於下拉式選單選定欲轉換之幣別,並按下轉換按鈕後,應用程式將廣播自訂事件(dispatch event);自訂事件內包含參考國家及目標國家幣別之屬性。
  • CurrencyConvertorEvent.as
  • package com.asfusion.mate.currencyConvertor.events
    {
        import flash.events.Event;
        
        public class CurrencyConvertorEvent extends Event
        {
            public static const Convert: String = "CurrencyConvertEvent";
            
            public var fromCurrency : String;
            public var toCurrency : String;
            
            public function CurrencyConvertorEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
            {
                super(type, bubbles, cancelable);
            }        
        }
    }
    

View
  • 應用程式的介面設計,與『Mate初探 - Part1』相同。
  • CurrencyConvertorPanel.mxml
  • <?xml version="1.0" encoding="utf-8"?>
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
        
        <fx:Script>
            <![CDATA[
                
                import com.asfusion.mate.currencyConvertor.events.CurrencyConvertorEvent;
                
                [Bindable]
                public var currency:String;
                [Bindable]
                private var currencyList:Array=["EUR","JPY","KRW","TWD","USD"];
                
                // perform the action - dispatch an event
                private function currencyConvert() : void {
                    currency="";
                    var currencyConvertorEvent:CurrencyConvertorEvent = new CurrencyConvertorEvent(CurrencyConvertorEvent.Convert);        
                    currencyConvertorEvent.fromCurrency = this.fromCurrency.selectedItem.toString();
                    currencyConvertorEvent.toCurrency=this.toCurrency.selectedItem.toString();                
                    dispatchEvent(currencyConvertorEvent);                
                    this.currencyStr.text=this.fromCurrency.selectedItem+" convert to "+this.toCurrency.selectedItem + " : " ;
                }
            ]]>
        </fx:Script>
        
        <mx:Form>
            <s:Group>
                <s:layout>
                    <s:VerticalLayout verticalAlign="middle" horizontalAlign="center"/>
                </s:layout>
                <mx:FormHeading label="幣值轉換"/>
                <mx:Spacer height="5"/>
                <mx:FormItem label="參考國家">
                    <mx:ComboBox id="fromCurrency" dataProvider="{currencyList}"/>
                </mx:FormItem>
                <mx:Spacer height="3"/>
                <s:Label text="轉換為"/>
                <mx:Spacer height="3"/>
                <mx:FormItem label="目標國家">
                    <mx:ComboBox id="toCurrency" dataProvider="{currencyList}"/>
                </mx:FormItem>
                <mx:Spacer height="3"/>
                <s:Button width="60%" label="轉換" click="currencyConvert()"/>
                <s:Group>
                    <s:layout>
                        <s:HorizontalLayout verticalAlign="middle" horizontalAlign="center"/>
                    </s:layout>
                    <s:Label id="currencyStr"/>
                    <s:Label id="convertCurrency" text="{currency}"/>
                </s:Group>            
            </s:Group>        
        </mx:Form>
    </s:Group>
    
    

Event Map
  • Event Map相當於應用程式的控制中心,用於監聽各廣播事件(dispatched event),並執行相關處理(handling)。
  • 本示範例的Event Map將監聽CurrencyConvertorEvent.Convert事件類型,當該事件類型被監聽到,將執行EventHandlers標籤內的程式碼。
  • 執行程序首先將呼叫CurrencyConvertor Web Service服務,傳入event.fromCurrency及event.toCurrency作為參數,若服務呼叫成功,則將幣別轉換後的值,儲存至CurrencyManager類別(model)的currencyValue屬性。
  • Injectors標籤則為將CurrencyManager類別的currencyValue屬性值,設定給CurrencyConvertorPanel類別(view)的currency屬性,用以展示幣別轉換後的值。
  • MainEventMap
  • <?xml version="1.0" encoding="utf-8"?>
    <EventMap xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
              xmlns:mx="library://ns.adobe.com/flex/mx" xmlns="http://mate.asfusion.com/">
        
        <fx:Script>
            <![CDATA[
                import com.asfusion.mate.currencyConvertor.views.CurrencyConvertorPanel;
                import com.asfusion.mate.currencyConvertor.events.CurrencyConvertorEvent;
                import com.asfusion.mate.currencyConvertor.business.CurrencyManager;
            ]]>
        </fx:Script>
    
        <fx:Declarations>            
        <!-- Debugger -->
        <Debugger level="{Debugger.ALL}" />    
        
        <!-- CurrencyConvertorEvent.Convert -->
    
        <EventHandlers type="{CurrencyConvertorEvent.Convert}" debug="true">        
            <WebServiceInvoker wsdl="http://www.webservicex.net/CurrencyConvertor.asmx?WSDL"
                               method="ConversionRate"
                               arguments="{[event.fromCurrency,event.toCurrency]}" 
                               debug="true">
                
                <resultHandlers>
                    <!-- store the last price from the parsed results -->
                    <MethodInvoker generator="{CurrencyManager}" 
                                   method="storeCurrency" arguments="{resultObject}"/>
                </resultHandlers>
                
            </WebServiceInvoker>
        </EventHandlers>        
        
        <!-- Injectors -->        
        <Injectors target="{CurrencyConvertorPanel}">
            <PropertyInjector targetKey="currency" source="{CurrencyManager}" sourceKey="currencyValue" />
        </Injectors>
        </fx:Declarations>
    </EventMap>
    

Model
  • CurrencyManager類別透過storeCurrency方法,將服務回傳的幣別轉換值儲存至currencyValue屬性。
  • CurrencyManager
  • package com.asfusion.mate.currencyConvertor.business
    {
        public class CurrencyManager
        {
            [Bindable]
            public var currencyValue:String;
                
            public function storeCurrency(convertValue:Number):void {
                currencyValue = convertValue.toString();
            }
        }
    }
    

Main Application 
  • 應用程式的執行點,將Event Map與View包含在內。
  • CurrencyConvertorMate.mxml
  • <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx" 
                   xmlns:maps="com.asfusion.mate.currencyConvertor.maps.*" 
                   xmlns:views="com.asfusion.mate.currencyConvertor.views.*" minWidth="955" minHeight="600">
        
        <fx:Declarations>     
           <!-- Event Maps -->    
           <maps:MainEventMap />    
        </fx:Declarations>
    
        <!-- Views -->    
        <views:CurrencyConvertorPanel />
        
    </s:Application>
    

2010年11月4日

Mate初探 – Part1


最近參與的專案,將導入Mate Framework,在此將Mate的重點及學習資源稍作整理。

Mate為何(What is Mate)?
  • Mate是標籤式與事件驅動的Flex框架(Flex framework)。
  • Flex應用程式主要是透過事件(events)進行元件或物件間的溝通,而Mate將使得處理這些事件變得簡單,不論是從伺服端取得資料或事件被觸發。
  • Mate也提供DI( dependency injection)機制,讓應用程式達到鬆耦合的目標,而Mate同樣是具有MVC概念的框架。

Mate專案必須要有的項目
  • 一個或以上的事件(自訂或內建)。
  • 一個或以上的Event Map。

建置Mate專案的一般步驟:
  1. 將Mate.swc加入至專案。
  2. 建立一個繼承至EventMap的類別。
  3. 將該event map加入至主應用程式內。
  4. 建立一個自訂事件。
  5. 於某處,廣播該事件(dispatch the event)。
  6. 於event map新增 EventHandlers用以監聽與處理廣播的事件。
  7. 執行在EventHandlers區塊內的相關程序。
  8. 依需要,重複4-7的步驟。

以示範例作Mate的基礎介紹:
  • 使用者透過介面的操作,可進行幣值的轉換,幣值轉換為採用CurrencyConvertor Web Service服務。
  • 傳統上的寫法,為將介面、處理程序、資料儲存都寫在主應用程式內(main application),該程式撰寫手法,雖直觀與簡便,但介面與處理程序的緊密結合,將不易於應用程式的維護與後續擴充,也無法透過分工方式進行多人開發。
  • 導入Mate,以MVC架構開發應用程式,將能改善元件或物件間的高度耦合,以解決上述問題。



傳統寫法
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <s:WebService id="currencyService" wsdl="http://www.webservicex.net/CurrencyConvertor.asmx?WSDL"
                      result="resultHandler(event)" fault="faultHandler(event)"/>
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.collections.ArrayCollection;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            
            [Bindable]
            private var currency:Number;
            [Bindable]
            private var currencyList:Array=["EUR","JPY","KRW","TWD","USD"];
            
            private function clickHandler():void{
                currencyService.ConversionRate(fromCurrency.selectedItem,toCurrency.selectedItem);
            }
            
            private function resultHandler(event:ResultEvent):void{
                this.currency=Number(event.result);
                this.currencyStr.text=this.fromCurrency.selectedItem+" convert to "+this.toCurrency.selectedItem + " : " ;
                this.convertCurrency.text=this.currency.toString();
            }
            
            private function faultHandler(event:FaultEvent):void{
                Alert.show(event.fault.message,event.fault.faultCode);
            }            
        ]]>
    </fx:Script>

    <mx:Form>
        <s:Group>
            <s:layout>
                <s:VerticalLayout verticalAlign="middle" horizontalAlign="center"/>
            </s:layout>
            <mx:FormHeading label="幣值轉換"/>
            <mx:Spacer height="5"/>
            <mx:FormItem label="參考國家">
                <mx:ComboBox id="fromCurrency" dataProvider="{currencyList}"/>
            </mx:FormItem>
            <mx:Spacer height="3"/>
            <s:Label text="轉換為"/>
            <mx:Spacer height="3"/>
            <mx:FormItem label="目標國家">
                <mx:ComboBox id="toCurrency" dataProvider="{currencyList}"/>
            </mx:FormItem>
            <mx:Spacer height="3"/>
            <s:Button width="60%" label="轉換" click="clickHandler()"/>
            <s:Group>
                <s:layout>
                    <s:HorizontalLayout verticalAlign="middle" horizontalAlign="center"/>
                </s:layout>
                <s:Label id="currencyStr"/>
                <s:Label id="convertCurrency"/>
            </s:Group>            
        </s:Group>        
    </mx:Form>    
</s:Application>

以Mate改寫的作法,將於下篇文章『Mate初探 – Part2』作介紹。

2010年11月1日

『民國100年大泡沫』讀後感




民國100年大泡沫
財富即將重分配,央行沒告訴你的真相

作者:王伯達




你是否曾感到困惑或無奈,為何辛勤的工作,所賺得的薪水卻永遠不夠花用,買房子像是個遙不可及的夢想,生兒育女再也不是件簡單的事,這背後是誰推升了物價的飆漲,卻把我們口袋的錢變薄了,在這本『民國100年大泡沫』,或許可以找到些答案。

作者以近幾年來,台灣『外匯存底』的現象,來說明為何民國100年,台灣經濟體將面臨大泡沫,1929年的美國大蕭條、日本失落的十年、亞洲金融風暴、1990年台灣的萬點泡沫,都與外匯存底快速且鉅額累積有一定的關聯,作者將此稱為『外匯存底的詛咒』。

在電視新聞播報,偶爾可聽聞台灣的外匯存底又創新高,就播報的內容與語氣,彷彿是政府的一項功績;央行緊釘匯率修理熱錢,彷彿就是正義使者的化身,打擊邪惡的投資客,藉以伸張正義,但事實是否就如你我所聽所聞,書本封面的「央行沒告訴你的真相」,是否表示了某些真相是我們所未曾知曉的。

作者並非預言家,而是在書中藉由扎實的數據資料與分析,說明台灣這次大泡沫的成因為何,以及泡沫破滅後,隨之而來的蝴蝶效應,美國次貸風暴所演變的全球金融風暴,重創世界經濟,台灣的經濟也正逐步從風暴後復原,但是否能再禁得起大泡沫的考驗,令人擔憂,而藉由作者本書的出版,匯率政策這個以往禁忌的話題,也逐步受到關切與挑戰,近期財金或新聞節目也以台灣是否會面臨泡沫,進行議論。

你還在聽投顧老師口沫橫飛的報名牌嗎,別再緣木求魚了,整體經濟方向的掌握,才是致富的關鍵,現今你我都處在大泡沫之中,該如何參與此次的財富重分配,「你」準備好了嗎。