2011-05-23

影音轉檔到IPAD觀看

轉檔工具:格式工廠 Format Factor
IPAD 觀看軟體:VLC Media Player

光碟片品質好壞不一,裡面的資料也是有過時的問題。實體光碟真讓人留也不是,不留也不是。忽然發起狠來開始把某些影音檔案copy 到硬碟,一不作二不休,順便看看是否可轉成IPAD 也可以觀看的模式。

官方說法:
video formats supported: H.264 video up to 720p, 30 frames per second, Main Profile level 3.1 with AAC-LC audio up to 160 Kbps, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats; MPEG-4 video, up to 2.5 Mbps, 640 by 480 pixels, 30 frames per second, Simple Profile with AAC-LC audio up to 160 Kbps per channel, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats; Motion JPEG (M-JPEG) up to 35 Mbps, 1280 by 720 pixels, 30 frames per second, audio in ulaw, PCM stereo audio in .avi file format

巧虎DVD 轉檔設定格式如下
影片編碼:AVC(H264)
螢幕大小:720x480
位元率:1024
FPS:23.976

Audio 的部分按原本設定即可

2011-05-11

Oracle Triggers 觸發器

Oracle Database triggers 的使用時機:想要於資料庫有變化時,自動執行某種程序,如:
  • 當資料庫伺服器發生資料操作語言(DML) 事件-包含對資料表或檢視發出的 UPDATE、INSERT 或 DELETE 陳述式。
    觸發程序可協助強制執行商業規則,以及當資料表或檢視中的資料修改時協助擴充資料的完整性。

  • 當資料庫伺服器發生「資料定義語言」(Data Definition Language,DDL) 事件-包含 CREATE、ALTER、DROP 陳述式。
    觸發程序可以用來執行資料庫中的管理工作,例如稽核與管理資料庫作業。

Oracle Database triggers 的五種類型
  1. Statement triggers

    此種 trigger 跟 DML 操作(例如:DELETE、INSERT、UPDATE)有關聯,但每一次的 DML 操作僅會觸發一次 trigger。

    雖然設定在 DML 操作上的 trigger 在 DML 操作發生時僅會出發一次,但可以同時設定多個 trigger 在同一個 DML 操作上,而且還可以透過「FOLLOW」、「PRECEDES」… 等關鍵字來決定多個 trigger 觸發的先後順序。

  2. Row triggers
    當 table 中的每一列資料發生 INSERT、UPDATE 或是 DELETE 時,此種 trigger 就會觸發。大致跟 statement trigger 運作方式相同,但 row trigger 是針對「每一列」資料進行觸發;因此假設一個 DML 同時影響很多筆資料時,statement trigger 僅會出發一次,但 row trigger 卻會觸發很多次。

  3. INSTEAD OF triggers
    可以用在當使用者針對 VIEW 或是衍生欄位進行操作時,可透過 trigger 將資料進行正確的資料處理。

  4. User event triggers
    用於 DDL(例如:CREATE、ALTER、DROP、USER LOGON/LOGOFF … 等等) 以及特定的 DML 操作(分析、統計、稽核、使用者權限管理)上。

  5. System event triggers
    當資料庫啟動、關閉、或是發生錯誤的事件發生時,會進行觸發。
Trigger 語法與部份說明:

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF} {INSERT | DELETE | UPDATE [OF column [, column …]]} ON {[schema.] table_name | [schema.] view_name} [REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}][FOR EACH ROW ]

[WHEN condition]

BEGIN
triggered_action;
END
  • trigger name 在同一個 schema 中,trigger name 必須是唯一的。

  • {BEFORE | AFTER | INSTEAD OF}
    即該TRIGGER 是在觸發事件發生之前(BEFORE)還是之後(AFTER)觸發,也就是觸發事件和該TRIGGER 的操作順序。不是每個事件都有前後可以設定,例如:STARTUP、SUSPEND、LOGON … 等事件,就僅有 AFTER 可以用;而 SHUTDOWN、LOGOFF … 等事件就僅有 BEFORE 可以用。

  • {INSERT | DELETE | UPDATE [OF column [, column …]]} ON {[schema.] table_name | [schema.] view_name}

    何種情況下觸發TRIGGER; 例如:INSERT, UPDATE, DELETE。

  • REFERENCING
    說明相關名稱,在ROW Triggers的PL/SQL塊和WHEN 子句中可以使用相關名稱參照當前的新、舊列值,預設的相關名稱分別為OLD和NEW。觸發器的PL/SQL塊中應用相關名稱時,必須在它們之前加冒號(:),但在WHEN子句中則不能加冒號。

  • WHEN
    說明觸發約束條件。Condition 為一個邏輯表達時,其中必須包含相關名稱,而不能包含查詢語句,也不能調用PL/SQL 函數。WHEN 子句指定的觸發約束條件只能用在ROW Triggers的BEFORE 和AFTER 不能用在INSTEAD OF。
  • triggered_action:trigger 所要執行的程式內容。



Trigger 的設計原則與限制

雖然 trigger 看似很好用,可以作很多的管理與控制,但最好還是注意以下幾點原則與限制:

  1. 過度使用 trigger 或許會產生複雜的依賴關係,後續的維護變得很困難。
  2. 確定當某個特定工作執行後,所有相關與相依的工作都有被一一執行。
  3. 避免將 recursive trigger 的發生,否則記憶體裝再多都沒用。
  4. 避免 trigger 的工作會觸發另一個 trigger 而造成連鎖效應,以免造成非預期的情況發生,或是對資料庫效能造成影響。
  5. 不要用 trigger 作一些資料庫已經能做的工作,例如:參考完整性的檢查。
  6. 確定「BEFORE」、「AFTER」的使用有符合規則與需求。
  7. trigger 的程式碼不宜過多(Oracle 限制不能超過 32 Kb),若是程式碼太多,或許可以考慮寫成 stored procedure 來處理。
  8. 確定 trigger 中運作的工作符合資料庫與商業邏輯規則,若是要針對特定人物、特定團體或是特定 application 客製化工作需求,別用 trigger,寫在 application 裡面吧!
  9. 在 trigger 中無法使用 COMMIT、ROLLBACK、SAVEPOINT … 等關鍵字,因為 DDL 操作已經隱含 COMMIT 在裡面了。

<範例>
資料表 employees 內容若有修改,記錄修改的使用者、時間、及修改的型態到employees_log。(在employees建立Row triggers 名為 biud_employee)

Create or replace trigger biud_employee Before insert or update or delete On employees FOR EACH ROW;

Begin
if inserting then l_action:=’Insert’;
elsif updating then l_action:=’Update’;
elsif deleting then l_action:=’Delete’;
else raise_application_error(-20001,’You should never ever get this error.’);
Insert into employees_log(Who,action,when) Values( user, l_action,sysdate);
End;


參考網站:

2010-12-15

Android 初探 -網路資源



什麼是 Android 應用程式框架 (Application framework)?


對於應用程式的開發者來說,他得以透過Java程式呼叫應用程式框架所提供的應用程式界面(Application Programming Interface, API),來實作更底層的函式庫(Libraries)功能。在這個應用程式框架之中,包含了活動管理者(Activity Manager)、視窗管理者(Window Manager)、內容提供者(Content Providers)、外觀元件系統(View System)、程式管理者(Package Manager)、電話功能管理者(Telephony Manager)、資源管理者(Resource Manager)、地理位置管理者(Location Manager)以及訊息管理者(Notification Manager)等服務或者系統。


什麼是 Dalvik 虛擬機器 (Dalvik virtual machine)?


Android SDK會將所有檔案壓縮包裏成單一的Android封裝檔(副檔名為 .apk,Android application package)。在Andorid當中的每一個應用程式都會對應”一個”專屬它的Dalvik VM。如此的設計,可以確保每一個應用程式之間都是相互獨立而彼此不影響。


什麼是 Webkit 網頁引擎 (Web browser engine)?


它可以讓正常網頁(非手機版本)如同在個人電腦般,自動調整成頁寬(auto fit page)的方式完整縮小呈現在手機的小螢幕中,如此可以方便使用者立即在手機上看到正常網頁的全觀(如下圖所示),如果要近看某區塊之內容時,只要將該區塊放大即可。這是其它舊式網頁引擎不容易做到的事,但應用Webkit網頁引擎卻可輕易達成。


Android API 已內含Webkit相關的函式庫,應用程式需要內嵌顯示網頁內容或者需要執行Java Script客戶端網頁程式碼等狀況時,皆可運用Webkit函式庫來進行整合的動作。


什麼是 OpenGL ES?


Android的圖形處理分成兩個部份,一為2D圖形處理,這部份是採Android自行規範定義的2D圖形處理函式庫(2D graphics library)。二為3D圖形處理,此部份則採行OpenGL ES 3D圖形處理函式庫。


什麼是 SQLite 資料庫?


開發者在開發應用程式的過程之中,難免會有資料儲存的需求,比如需要儲存應用程式的設定資料或者上一次遊戲關卡的資料等…。因此,Android內建了一個名為SQLite的關聯式資料庫引擎(Relational database engine)。Android應用程式的開發者則採呼叫API的方式來與SQLite作溝通。同時,SQLite當中的資料庫是以單一檔案的方式儲存在手機硬體當中。


Android 支援那些感應器(Sensor)?


Andorid應用程式開發者所能發揮的空間,除了取決於作業系統的版本之外,也指涉了手機硬體上的週邊設備。亦即,開發者能夠應用智慧型手機上的數位相機鏡頭(手機照相機)、衛星定位裝置、電子羅盤(方向感應器)與重力感應器等週邊設備,去創造更多深具創新價值的應用程式。


什麼是 Android SDK?


Google為了讓更多開發者參與Android應用程式的開發行列,因此,它開放給大眾免費下載安裝Android 軟體開發工具包(software development kit, SDK)。而且,這個工具包可以安裝在Windows、Linux以及Mac等不同的作業系統環境當中。 Android SDK除了提供了完整的Android API之外,更包括了Android應用程式除錯工具(Android Debug Bridge, ADB)以及Android 手機模擬器(Android Emulator,此為在個人電腦上模擬Android手機的環境)。如此免費與開放是Android之所以在近來深受手機應用程式開發者喜愛的主因之一。除了Android SDK之外,其它配合它的軟體也是免費性質。這些軟體包括了Eclipse整合開發環境(Integrated Development Environment, IDE)以及Eclipse專用之Android開發工具外掛(ADT Plugin for Eclipse)。再加上原本就免費開放下載的Java開發工具包(Java Development Kit, JDK)。開發者幾乎不用花費到一毛錢,便可以自己建構一個很完整且便利的Android應用程式開發環境,並專心構思與發展屬於自己的應用程式。不過,如果開發者要上傳應用程式到Android Market網站供大家免費下載或收費販售時,則需要再付25美元的帳號註冊費。


開發套件的流程順序