1. 如何備份mysql database

    有時候換環境的時候,會想要連同資料庫一起移動過去,假設要備份一個database叫做library。

    mysqldump -u root -p --databases library > library.sql
    

    到新的環境中如何重新載入library.sql呢?

    mysql -u root -p < library.sql
    

    Read more...


  2. Lubuntu 底下設定雙螢幕

    以下是 lubuntu 的設定方式。

    如果想進入桌面之後就執行,必須要去修改.config/lxsession/Lubuntu/autostart

    加入

    @xrandr --auto --output VGA-1 --right-of DVI-I-1
    

    接著會在.config/autostart/lxrandr-autostart.desktop看到相關設定。

    Read more...


  3. Flyweight Pattern

    用的時間點

    當想要節省記憶體空間的時候使用。

    如何設計

    儘量共用物件個體,不做無謂的new。

    程式範例

    輸出大型文字。

    Flyweight 參與者

    表示以一般處理會讓程式變重,因此選擇共用較佳的參與者。例如BigChar類別。

    Flyweight FlyweightFactory 參與者

    產生Flyweight 參與者的工廠。利用這個工廠來產生 Flyweight 參與者,即可共用物件個體。 例如BigCharFactory類別。

    Client 參與者

    利用 FlyweightFactory 參與者產生並使用 Flyweight 參與者。例如 BigString 類別。

    問題

    1. 在 BigString 中新增如下的建構子。BigString(String string, boolean shared),若 shared 為 true 則共用 BigChar;若為 false ...

    Read more...


  4. 如何在ubuntu中製作gif檔

    在ubuntu上面製作gif檔的話,可以安裝ImageMagick

    假設把所有的image file放到gif資料夾中,注意檔名最好排序過,例如001.png, 002.png, and 003.png...

    #delay的值*10ms為delay的秒數,loop為0表示infinite loop
    convert -delay 100 -loop 0 gif/* output.gif
    

    Read more...


  5. Interpreter Pattern -- 以類別來表達文法規則

    用的時間點

    Design Pattern 的目的之一就是要提高類別的可再用性。 可再用性是指已經產生的類別不需要多做修改或是儘量不修改就能多次使用的意思。

    Interpreter Pattern 是用簡單的"迷你語言"來表現程式要解決的問題,以迷你語言寫成"迷你程式"而表現具體的問題。迷你程式本身無法獨自啟動,必須先用Java語言寫另一個負責翻譯的程式(直譯器)。當能解決的問題發生變化時,要修改迷你程式來對應處理,而不是修改直譯器(儘量避免去修改)。

    如何設計

    當問題發生改變時,儘可能不去修改到直譯器(以Java寫成)。

    程式範例

    首先來定義我們的問題,我們要用迷你語言來操控玩具車。玩具車基本動作有 go, right, left 以及 repeat。go 表示前進,right 表示向右轉,left 表示向左轉,repeat 像是一個迴圈,後面接上若干個命令。 以下是幾個範例:

    1. program go right right go end
    2. program ...

    Read more...


  6. Iterator Pattern

    Iterator Pattern是指依序掃描並且處理多個數字或變數。本身也是反覆的意思,又可以稱為迭代器。

    現在要寫一個程式,可以把書籍放到書架上,並且依序印出來。

    Aggregate Interface,實作此Interface的類別就變成類似陣列(多個數字或變數的集合)

    public interface Aggregate {
        //一個可對應聚合的iterator
        public abstract Iterator iterator();
    }
    

    如果要掃描整個聚合時,利用iterator方法即可建立一個實作Iterator介面的類別物件個體。

    public interface Iterator {
        //有沒有下一個元素
        public abstract boolean hasNext();
        //下一個元素
        public abstract Object next();
    }
    

    Book類別。

    public class Book {
        private String name = "";
        public Book(String name) {
            this.name = name;
        }
        public ...

    Read more...


  7. 如何在ubuntu中安裝LAMP

    #install apache
    sudo apt-get install apache2
    
    #install php
    sudo apt-get install libapache2-mod-php5 php5
    sudo /etc/init.d/apache2 restart
    #install mysql
    sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql
    #test mysql
    mysql -u root -p
    #install phpmyadmin(not necessary)
    #一開始會問你要不要自動幫你設定phpmyadmin,選擇yes。之後會問你mysql server中root的密碼。
    #最後會問你進入phpmyadmin的密碼。
    sudo apt-get install phpmyadmin
    

    如果 http://localhost/phpmyadmin ...

    Read more...


  8. Mediator Pattern -- 只要面對一個顧問

    用的時間點

    一個小組裡10個同樣立場的成員共同進行作業,但卻各自為政。每個成員都對別人發出指令,讓整個作業亂成一團。而且還有干擾其他成員的作業方式、不斷發生指令相左的情形。這時候如果有一個立場超然的 顧問 站出來說: 請各位成員把所有狀況回報給我這個顧問,我會整體做出考量後發給各位適當的指示。但是我不會插手管各位手上工作的細節。所有成員同意顧問的提議,於是達成共識。

    如何設計

    每個成員都只對顧問提出報告,也只有顧問會發出指令給各個成員。成員彼此之間也不會去探問目前狀況如何,或亂發指令給其他成員。mediator 就是一個顧問,如果有困難就告訴顧問、發生什麼會影響到整個小組的事情也要告訴顧問。對於顧問提出的要求事項要確實執行。所有小組成員都不可以擅自跟其他成員溝通意見做判斷,必須透過顧問才能進行到下一個動作。而顧問則根據小組成員所提出的報告做整體性判斷,對各個成員發出指令。

    程式範例

    設計一個要求輸入姓名和密碼的系統登入對話方塊的 GUI 應用軟體。這個對話方塊的使用規則如下:

    • 選擇訪客 (Guest) 登入或用戶 (Login) 登入
    • 若為用戶登入,則輸入用戶名稱和密碼
    • 選擇登入則按OK,放棄登入則按 Cancel。

    有以下限制:

     若選擇訪客登入,則用戶名稱和密碼要設為不可使用,無法輸入字串。  若選擇用戶登入,則用戶名稱可以使用 ...

    Read more...


  9. Memento Pattern

    用的時間點

    在文書軟體的操作環境下,即使不小心誤刪除了某些文字內容,只要利用 undo 功能就能救回被刪除前的內容。有些文書軟體甚至支援一次以上的還原動作。 物件導向程式如果要執行復原,必須預先儲存物件個體的狀態。但是又不能只做儲存的動作,否則無法以儲存的情報將物件的個體復原的原始的狀態。 必須要能自由存取物件個體內部的情報,才能還原物件個體。不過如果對存取動作毫不設限,又會讓高度依賴類別內部結構的程式碼分散到程式各處,增加修改類別時的困擾。這稱為封裝式破壞。

    如何設計

    加入表示物件個體狀態的功能,而能在執行儲存以及復原時不發生封裝性破壞。它會讓某個時間點的物件個體狀態紀錄儲存起來,等到以後再讓物件個體復原到當時的狀態。例如:

    1. undo (復原)
    2. redo (重複)
    3. history (產生操作紀錄)
    4. snapshot (儲存目前狀態)

    程式範例

    模擬一個收集水果的骰子遊戲,遊戲規則很簡單:

    • 遊戲會自動進行
    • 遊戲的主人翁丟骰子,根據骰子的結果
    • 出現好的點數,則金錢增加。
    • 出現不好的點數,則金錢減少。
    • 出現很好的點數,可額外得到一個水果。
    • 玩到沒錢時,遊戲結束。

    為了後面能不受影響繼續進行,程式中儲存金錢的位置有建立一個 Memento 類別的物件個體,用來儲存 ...

    Read more...


« Page 3 / 13 »