Friday, May 07, 2010

My favorite chrome extensions

沒看到google提供收藏最愛extensions的功能.. 只好自己做個記錄順便分享一下。

  1. SearchPreview for Google: 可以替google搜尋結果加上網站預覽的小圖
  2. Auto Replay for YouTube: 提供youtube自動replay功能
  3. Tab Menu: 條列所有開啟的tab
  4. IE Tab: 以ie核心開啟網頁(沒辦法~ 有些網站就是不得不)
  5. Google 文件 PDF/PowerPoint 檢視器 (由 Google 提供): 以google文件檢視器直接開啟PDF、PPT等文件

本來就很容易分心,所以沒有裝更多其他有的沒的XD。另外列一些個人感興趣還沒使用的:

  1. MegaUpload DownloadHelper: (另有RapidShare的)免倒數~ cool
  2. Turn Off the Lights: 觀看有影片的網頁時,可以把背景都變黑,讓你有置身於電影院內的感覺XD
  3. Robot Theme, inspired by Android™: 只是一個android佈景主題,好似很可愛
  4. Clickable Links: 將原本不是做成超連結的url或e-mail add變成clickable links
  5. Google Tasks: 相當簡潔的待做清單囉(應該是只有local啦)
  6. 迅雷、快车、旋风专用链自动破解: 不想解釋=P
  7. JoinTabs: 這個好!!! 在開了許多tab之後,可以把相關的另外拉成一個chrome window。不知道好不好用~
  8. Eye Dropper: 網頁選色工具,也有color picker

Q: What is a mutating table error and how can you get around it?

相當慚愧的... 在看到這題以前,我也完全沒聽過mutating tabel這東西OTZ

[類別] PL/SQL
[問題] 什麼是mutating table error? 該如何處理這類錯誤?

Answer:
在回答什麼是mutating table error前,先來說說什麼是"mutating error"。當一個表格正在被UPDATE, DELETE或INSERT語法修改(也就是這個statement尚未commit, 表格正在"變更中"),或是一個table有可能是DELETE CASCADE的對象時,就是所謂的mutsting table。

只有row-level trigger(定義時使用FOR EACH ROW子句)嘗試要查詢或更新一個mutating table時,才會發生mutating table error! 主要是為了避免trigger存取不一致的資料。這時候trigger本身還有觸發trigger的語法(triggering statement)都會被rollback。

中文講的好爛請參閱英文講解 orz

A mutating table error (ORA-4091) occurs when a row-level trigger tries to examine or change a table that is already undergoing change (via an INSERT, UPDATE, or DELETE statement).

Mutating table error的中文訊息長這樣:

ORA-04091: 表格 Schema.Table 正在變更中, 觸發程式/函數無法檢視它

一般避免mutating table error最常見的方法是:

使用compound triggers或temporary tables(or views),讓同一session update/select不同表格

喋喋不休版
舉個會發生mutating table error的實例: 假如hr.employee的表格上有定義一個row-level的trigger: 每次有row被刪除時,會計算employee的總筆數。所以當你對hr.employee下一個SQL去刪除某列資料的同時(此時employee就是一個mutating table),也會觸發該trigger,這個trigger嘗試要存取employee,以上條件(mutating table, row-level trigger),即會發生mutating table error。

(It WORKS!)“could not create directory for unzipping” when installing chrome extensions

繼上篇只找到一個暫時有用的方法之後,過了不久,chrome越來越破爛,只好循重新安裝一途,沒想到重安裝之後,連想換個不景主題都會遇到一樣的問題... 真是晴天霹靂,完全不可接受,只好又花了點時間找找別的方法。

看到好多篇說要修改TEMP/TMP環境變數的,個人雖然相當不願意做這件事情,不過試了發現對我還是無效,最後找到一個相當簡易的方法!!! 只要在開啟chrome的捷徑內容幫他加個參數就好了:

2010-05-07_001

沒錯,就是" --no-sandbox" 記得參數前要有一個空白。

重新啟動chrome之後就可以正常安裝主題還有擴充功能囉喔喔喔~ 不過因為個人對這個參數的意義相當不解,所以建議安裝完之後還是把這個參數拿掉吧... 有需要的時候再加回來使用。

Ref: [SECI 知識轉換] [GC] 暫時解決無法安裝擴充功能問題

(補) sandbox

Chrome 擴展也有使用 Sandbox 技術,即每個擴展是獨立運行的。在安裝一些擴展後你可發現 task manager 內會有較多的 chrome.exe 在運行。獨立運行的好處,是一個擴展死掉不會拖累另一個。
from: http://www.hksilicon.com/kb/articles/3764/1/Chrome-Extension-/Page1.html

Thursday, May 06, 2010

設定PowerBuilder連接oracle資料庫之.ini file

environment

PB version: PB11 
Local computer: Oracle 10g/11g client

Pb application原本是使用ODBC來與資料庫連線:

[DataBase]
DBMS=ODBC

DbParm=ConnectString='DSN=test;UID=user_id;PWD=user_pwd'

不知道什麼原因,有少數datawindow的效率相當不好,因此想要將連線改為PB提供的oracle driver(版本對照請參考這兒)。步驟如下:

Step1: 開啟PB > Tools > Database Profile…

1_open

 

Step2: 選擇PB所提供最新的oracle driver(O10 Oracle10g),按右鍵選擇”New Profile…”

2_dbprof

 

Step3: 設定新連線內容

3_setconn

    Profile Name: 新連線名字
    Server: net manager裡設定的"服務命名"
    Login ID / Password: 資料庫user帳號密碼

4_setsys

    PowerBuilder Catalog Table Owner: 就是oracle的schema owner

5_setsyntax

    Enclose Table and Column Names in Quotes: 這個選項如果勾起,SQL語法的表格名稱還有欄位會自動被放在雙引號裡,這有時候會造成一些問題(像ORA-00904),可以視需求勾選。

Step4: Preview and test

6_test

點 "Test Connection"看設定是否正確,沒問題就可以Apply並且OK。

Step5: 最後把設定檔export成*.ini檔

7_exp

在剛設定好的連線按右鍵 > Export Profile(s)... 將檔案存到目的資料夾內

Step6: 檢視匯出的內容揪竟長怎樣

[DBMS_PROFILES]
Profiles=test

 

[Profile test]
DBMS=O10 Oracle10g (10.1.0)
Database=
UserId=
DatabasePassword=
LogId=user_id

LogPassword=user_pwd
ServerName=test
DBParm=PBCatalogOwner='Owner_name',DelimitIdentifier='No'
Lock=
Prompt=FALSE
AutoCommit=FALSE
NewLogic=TRUE

前3行要刪掉,改放[DataBase],其他設定就隨自己需求增減,最後整個ini file大概會長這樣:

[DataBase]

DBMS=O10 Oracle10g (10.1.0)
LogId=user_id
LogPassword=user_pwd
ServerName=test
DBParm=PBCatalogOwner='Owner_name',DelimitIdentifier='No'

完工!

Friday, April 30, 2010

Materialized views: read-only, updatable, writeable

一直對oracle replication的機制不是相當了解,今天看了幾個章節,稍微有些心得,雖然還是不知道replication group存在的真正目的,不過到是對materialized view多了些認識。

Materialized view可以是read-only, updatable, writeable這三種模式。read-only相當好理解,不過updatable跟writeable兩個就... ?

Read-only
要做一個read-only的materialized view,就是不要使用"FOR UPDATE"這個子句(clause)即可。如其名,不可以對這類views執行任何DML語法。而且!!! 它也不需要屬於任何一個materialized view group。

Updatable
跟read-only相反,可以在這類views上執行DML語法,而這些變更也可以透過排程或其他方法更新回target master(可能是一個master table或master materialized view);不過有一個前提: 就是updatable materialized view必須放在一個materialized view group裡。

Writeable
writeable的materialized view跟updatable一樣,會用到"FOR UPDATE"子句。唯一差別是,他不會放在materialized view group內,換句話說,即使可以對writeable的materialized view執行DML,但是變更並不會更新回target master。(那幹嘛不用read-only就好=   = 所以這類materialized view也比較少用)

整理如下:

  Read-only Updatable Writeable
created with “FOR UPDATE” clause? N Y Y
perform DML operation? N Y Y
placed in a materialized view group? N Y N
changes be pushed back to master? N Y N
Tuesday, April 27, 2010

"could not create directory for unzipping" when installing chrome extension

※ 本篇只能"暫時"讓你安裝擴充功能而已,重新開啟chrome後該功能即會消失。另一解法請參考這理,works for me!! --2010/5/7

前陣子就發現在安裝google chrome extensions時會遇到這樣的錯誤(可是剛開始用的時候不會orz||),今天終於有一個extension讓我有動力想解決這個問題。

step1: 直接把extension下載下來,檔案的副檔名會是".crx"

2010-04-27_001

step2:  用解壓縮軟體直接把該檔案解壓縮
2010-04-27_002

step3: 回到chrome瀏覽器,在網址列輸入"chrome://extensions/"

step4: 點選右上角"開發人員模式" > "載入為封裝擴充功能"
2010-04-27_005 done~!

(補)不過後來發現,這個方法只能"暫時"使用extension而已,每次關掉瀏覽器再開啟,那個擴充功能就消失了,還是要再做一次上面的步驟才可以繼續使用 orz||。

Ref: Fixing the Chrome Error: “Could not create directory for unzipping”

Tags