2009-02-28

Safari 4 Beta - World's fastest browser


Web Browser 的大戰 真的慢慢的展開了~


Apple 已開放新版的 Safari 4 Beta 版供 Mac or Windows user 下載使用

在新版的Safari裡面

在速度上: 強調 HTML Rendering 的速度、Java Script Engine速度 都是世界最快,與其它Browser相比,幾乎都是用倍數來算的...

在標準上: 強調對於標準的支援~ 諸如 HTTP5, CSS3 等最新標準

在功能上: Top Sites, History Search, Cover Flow ... 等,都是另人驚豔的功能
雖說,Top Sites 提供user最常瀏覽網頁的功能以及History Search提供最近的瀏覽紀錄供叫用的功能就跟Chrome or Google新版Tool Bar提供的功能一樣,但是 透過 Apple的美學、透過Cover Flow的介面 硬是活生生的讓人覺的好像好棒~

這裡是Safari 4 Beta Release的消息來源
這裡可以看到 Safari 4 Beta 與不同瀏覽器的效能比較(IE8 Beta 也被拿來比,IE 系列的 都被電的慘歪歪的...)

總而言之~ 我衝著那速度感跟外觀~ 馬上就暫時拋開 Firefox & Chrome & 開始試用了 :)

有興趣的人也可以試玩看看

--
Cover Flow 的漂亮介面:




閱讀全文...

Google Apps Status Dashboard


Apps Status Dashboard 大致上就是: 針對google透過google apps提供的各項 service 提供目前及歷史的 healthy status 簡單報表及說明

不在google apps涵蓋範圍內的服務 不知目前有無類似的reporting機制

BTW, 因為google apps 設定的服務對象是在企業用戶

既然目的是要賣錢的 Service Level 的 Monitoring & Reporting 是相當的重要~

這樣的資訊揭露 算是必要的 也才可以對客戶有一個交待

未來 資訊應該會愈來愈多 愈細化~ 儲如 service availability, efficiency, ... 等更確切的指標 應該也會一一出來吧

雖然如此,一家公司~ 肯把這樣的資訊開誠佈公、讓所有的大眾知道 真的是不容易~ 拍拍手~

--


閱讀全文...

Google Chrome 防當機控制 ?!


雖說 Chrome 以 process per tab 的方式,將不同的tab isolate至不同的process

降低了因某 tab 的問題 導致browser crash 的機會...

但是... 今天... 我的確在windows的環境當中 用chrome... 然後... 當掉了

哈哈~ 可是 我覺的 這是因為 Microsoft 的問題 應該不是Chrome的問題才對 :Q

BTW, google 現在對功能的導覽影片 也有中文了耶~ 講的又慢又文縐縐的... 聽的還真不大習慣...


閱讀全文...

Google Tool Bar 6 Beta for IE / Google Tool Bar 5 Beta for FireFox (Google 工具列)


Google 推出了新版工具列的Beta版本,包含:
Google Tool Bar 5 for FireFox 的 Beta版本 &
Google Tool Bar 6 for IE 的 Beta版本

但是還是一樣沒有提供for chrome的版本

用chrome對我個人來講最大的困擾是~ 少了google tool bar 真的讓我使用上較不方便
像是,bookmark就無法像裝了google tool bar一樣容易存取/跨電腦分享
不過 目前這版chrome大概只是為了驗證新的 process per tab 的概念跟rendering&javascript enginge的速度吧...

BTW, 新版的 Google Tool Bar 有些新功能

1. 可以把 google gadgets加到tool bar的按鈕列~ 用起來 有些噁心~ 個人覺的呈現介面太小了 看不慣,不過 把一些小工具做成按鈕 隨時可以叫出來 又不用回到更噁心的iGoogle就能用~ 個人覺的還不賴~ 也很符合google想把browser/Web當作OS的企圖

2. 把chrome那一套搬過來: 新增tab時 會把常上的網站、最近關閉的分頁(tab)、最近新增的書籤 都呈現在新分頁的預設畫面中 --> 個人覺的這功能 還算ok用

3. tool bar 的設定,可以跨電腦 share 囉~ 就好像shared bookmark 一樣

4. Quick Search Box(QSB)功能: 要裝 for IE 的 toolbar 才有
在windows的工具上 出現了Google的按鈕,按個 Ctrl+Space就可以開始進行搜尋
(因為Ctrl+Space被佔用掉了 所以 我是用Alt+Space) 搜尋的東西除了網頁,還包含
本機電腦的應用程式~ 當然 免不了的 也會有搜尋的提示 以及 針對搜尋的結果可執行程式 or 打開網頁的功能。印象中 MAC OS X 的Finder 也有類似的功能,這功能 真的很優~ 透過google toolbar 完全把微軟OS變棒了 :) 哈哈...


閱讀全文...

2009-02-27

Goole Search, Gmail, Blogger... 相繼出錯~ Google 怎麼了 ?


Google 的產品品質 一向是讓人非常滿意~

不過 最近 好像頻頻出錯~

包含

2009/1/31 因為惡意網站的設定問題(malware filter, http://stopbadware.org/),讓google search出來的網站 都被標示上「惡意網站的標籤)

2009/2/24 Gmail outage, 聽說是設備當機?! 約二個半小時恢復正常

2009/2/27 上午使用Blogger時,發現 主頁資訊出不來,firebug show 出一些 javascript error
應該也是 google 出了什麼問題才對

其實,資訊系統出錯 在所難免 所以 我也不會像網友嘰嘲Gmail為 GFail.. 哈
反而覺的 google 還是有點人性的 :)
以後 系統出包,我們就可以把google的例子拿出來講 看可不可以擋掉一些炮火攻擊 哈哈..


閱讀全文...

SOP - Same Origin Policy (Browser Security Policy)


Same Origin Policy(SOP) 是一般 browser 針對 client-side script(如java script) 在安全性上面的一項處理原則

由於 client-side script 是在使用者的作業環境中進行,而在使用者的環境當中,常有一些穩私性的資料(如 cookie, 瀏覽行為...等),為避免這些 client-side script 去存取client端穩私資訊後 送交給無法限定範圍的遠端伺服器,所以 有了 SOP 這個原則

簡單講,就是client-side script不能存取所在網頁之外的資源
例如: 使用者目前瀏覽網頁為 http://example.com 上面有運行一些 javascript
依 SOP 的原則,browser 只會容許 javascript 存取 http://exmaple.com/* 下的資源
其它domain(e.g., http://malware.com), subdoamin(e.g., http://sex.example.com), domain 同port不同的(e.g., https://example.com),browser都不允許 client-side script來存取

當然~ 目前 Web 2.0, AJAX, Mashup 大量運用到 client-side script的技術,所以 SOP 也變成這些新設計方法的一大限制

不過~ 上有政策 下有對策~ 還是有一些方法可以繞過這個限制,即 work-around solution
目前我知道的方法如下:

1. 透過proxy的方式處理
即在網頁所在的Web server 建立一 proxy功能,所有要繞過SOP檢查的client-side script存取 都透過這個proxy去拿或處理~ 這種做法的先決條件是,開發人員要有辦法在該 Web server 上面開發並佈署上這個proxy的功能

2. 透過 HTTP 內 document.domain 的設定 解決跨sub-domain的限制
透過 設定 HTTP DOM裡面的 document.domain 值
只要 script 所在網頁的 document.domain值 與 資源所在網頁的 document.domain值一樣
Browser即會允許存取
注意: 這只能用來解決 跨 sub-domain (e.g., AAA.example.com 及 BBB.example.com)
而不能跳離跨domain的限制

3. JASONP (JASON with Padding)
基本原理有3個

1. html 裡頭的 script src (即 script 的來源)並不限定只能在 local domain
2. 利用 javascript 可以操作 HTML DOM 的特性讓 javascript 動態的引用外部script
即,增加一 script type=text/javascript src=[...url + parameter + call back function] 的 tag
3. 透過 client-side script與不同domain的service的配合(有點暗通款取的味道)
讓 另一domain有動態吐出script 並配合在script內加入 client-side定義好的
call back function 的能力

所以,只要遠端的server支援JASONP,那麼就可以透過動態插入 script tag及script src,
來取得遠端的 script 資料(裡面可能含有動能改變的data 及client端的call back function),script-client端 在動態取得這些所謂遠端的script資料後 即會在client端運行
這些script,透過callback function的機制 會再與原先設計用來handle JSONP的client端
script 碼有一關連性~ 最後 達到目的 繞過SOP的限制

下面應該是最早提出JSONP的的文章: Remote JSON - JSONP,我認為比較難懂
下面這篇文章,我認為較淺顯易懂: 利用 jsonp 进行 Javascript 的跨域数据访问

--
其它參考: wikipedia: SOP


閱讀全文...

2009-02-25

Google App Engine Billing (GAE, Google Application Engine 收費方案)


Google 去年四月推出的 Application Engine 服務

提供免費的運算資源供開發者佈署開發完成的程式供Web User使用

限額是每月不超過 500萬個 page view

今天在 app engine 的blog看到,GAE公佈了收費模式

文中提到~ 雖然目前提供限額的免費資源

不過 使用者的使用狀況可能太好了 使得 目前資源有不夠的狀況

未來,雖仍會提供500萬個page view的免費quota, 不過資源會在90天內做適度的調整
(一定是調小的啊...)

若要取得額外的Quota, 則需另外付費

下列是我目前用的免費帳號的 resource 分配狀況

依照google 的計價方式的話,1個app google 每天免費送你 7.035塊美金耶 :Q

聽起來還滿爽的唷 :) 呵呵...

依這樣的 Service Level, 一年大概二千六百塊美金, 折算台幣約九萬塊~

不用maintain 底層的infrastructure, 機房, 電力, 備援, ... 等有的沒的... 我想 這種價格應該算值得吧 :)

Resource Allocations:

Resource Budget Unit Cost Paid Quota Free Quota Total Daily Quota
CPU Time n/a $0.10/CPU hour n/a 46.30 46.30 CPU hours
Bandwidth Out n/a $0.12/GByte n/a 10.00 10.00 GBytes
Bandwidth In n/a $0.10/GByte n/a 10.00 10.00 GBytes
Stored Data n/a $0.005/GByte-day n/a 1.00 1.00 GBytes
Recipients Emailed n/a $0.0001/Email n/a 2,000.00 2,000.00 Emails
Max Daily Budget: n/a



所以囉~ GAE後台的管理介面 就多了付費設定這一項 :Q



資訊來源: http://googleappengine.blogspot.com/2009/02/new-grow-your-app-beyond-free-quotas.html


閱讀全文...

2009-02-18

IIS6 + Tomcat6 設定方法


1. 先有IIS

2. 安裝JDK
- download JDK and install
- set JAVA_HOME 環境變數至 jdk 安裝目錄

3. 安裝 Tomcat
- download Tomcat and install
- set CATALINA_HOME 環境變數至 Tomcat 安裝目錄

a. 首先先依上述連結下載取得 isapi_redirect-1.2.27.dll (目前最新版本)
b. 將該dll置於一特定目錄 (如: c:\TomcatConnector)
c. 在該目錄下 建立三個config file 分別為
isapi_redirect-1.2.27.properties (主檔名與 isapi_redirectxxxx.dll 的主檔名同)
workers.properties
uriworkermap.properties
d. 下述是我針對三個檔案的設定 (可在tomcat網站看到how-to說明及這些檔案的定義)
基本上,除 uriworkermap.properties 外的兩個檔案 都大概變動不大
uriworkermap.properties看名字跟內容就知,是用來設定哪些URL Pattern
是IIS要透過此connector交由tomcat處理的

isapi_redirect-1.2.27.properties
# Configuration file for the Jakarta ISAPI Redirector
# The path to the ISAPI Redirector Extension, relative to the website
# This must be in a virtual directory with execute privileges
extension_uri=/jakarta/isapi_redirect-1.2.27.dll

# Full path to the log file for the ISAPI Redirector
log_file=c:\TomcatConnector\isapi_redirect.log
# Log level (debug, info, warn, error or trace)
log_level=debug
# Full path to the workers.properties file
worker_file=c:\TomcatConnector\workers.properties
# Full path to the uriworkermap.properties file
worker_mount_file=c:\TomcatConnector\uriworkermap.properties

workers.properties
worker.list=wlb
worker.wlb.type=ajp13
worker.wlb.host=localhost
worker.wlb.port=8009

uriworkermap.properties
/examples/*=wlb

5. 設定IIS
a. 設定網頁服務延伸


b. 在站台上加入ISAPI filter

c. 在IIS站台上新增一虛擬目錄,命名為 jakarta 指向 Tomcat connector存放的位置
(本例為: c:\TomcatConnector),這個動作 對應到
isapi_redirect-1.2.27.properties 此設定檔內的下列設定:
extension_uri=/jakarta/isapi_redirect-1.2.27.dll

d. 注意,check download 下來的 isapi_redirect-1.2.27.dll 有無被 windows 封鎖


6. restart tomcat & iis

7. 連到 http://localhost:8080/examples 與 http://localhost/examples
check IIS 是否真的把符合 /exmaples/* 的 URL request 都餵給tomcat處理

8. 恭喜~ 大功告成

9. 後記: Tomcat網站上 說明有點遺漏
a. dll 可能被block的問題 官網上沒說明到
b. 除了 IIS 網頁服務延伸設定外,在 IIS 站台上 也要設定對應所使用的ISAPI位置
c. 官網上提供修改 windows registery的做法來記錄
workers.properties、uriworkermap.properties這些重要設定檔的位置
另外也提到可以在該 ISAPI dll 所在位置建立一isapi_redirect-1.2.27.properties
存放設定檔位置
當然~ 用第二種方法 感覺比較容易 :)


閱讀全文...

2009-02-17

Google Chrome comic - Chrome設計的背景


Google 也出漫畫了哦: Google Chrome Comic

Google委託了Scott McCloud這個畫家,透過與20多位google engineers的interview

用漫畫的方式,呈現出 chrome發展的背景以及重要的設計

若即早報名今年的Google I/O活動,主辦單位會送你一本hard copy 哦 :)

以下是我從這本漫畫看到的一些重點:

* 因Web application日漸普及,Browser也變成一執行application的重要平台,有重新發展以因應需求的需要

* 有別已往整個browser在OS看來是single process的設計
chrome 是採 multi-process 的架構,即一個 browser tab 為一單一的process
整個browser不會因為單一tab crash掉,而整個browser都垮掉

* 採用 WEBKIT opensource rendering engine (與 Safari相同)
提升頁面處理效率

* garbage collection 更有效率
過往single-process model, 在關閉單一Tab時仍可能有部分resource沒被釋放掉,
由於 memory fragementation的關係,在另開新tab時 因為剩餘的address space不夠
仍需再allocate新的address space供該process使用,久而久之就算把tab關掉 也無法解決
browser佔用大量resource導致系統變慢的可能
筆者不論在 IE/Firefox 都真的有這樣的經驗,最終 只能把整個 browser關掉、重啟來解決
Chrome 的 multi-process的model 每個 tab 都是獨立 process 在關閉tab時 resource是完全釋放的

* 每個Chrome Tab 所花用的 cpu/memory 都可透過其 chrome task manager來檢視其資源使用狀況,更容易找出來執行效果不佳的web site為何

* 透過大量的設備及page rank資料,進行涵蓋面廣且抓到重點web site的自動測試
以確保chrome的品質

* 採 V8 javascript virtual machine 提升 java script 處理效率
V8為 位於丹麥的google 團隊發展,並有 opensource 供它人使用

* V8對javascript 的處理,採用 dynamic code generation的技術,將java script compile為
machine code執行,更快、更有效率
(有別一般 interpret式的 java script engine, 每次要執行 javascript時 都要重新interpret一次)
另,有別過往javascript virtual machine 對 garbage collection 採的 conservative garbage collection機制,因java script都被v8 轉成machine code了,故可對memory使用有精確的常握,
故可採用 precise & incremental 式的garbage collection, 讓記憶體的回收更有效

* OMNIBox 做為 URL 的輸入列,但又不同於過往的URL Bar
除提供url auto-completion功能外,亦會依user的瀏覽歷史 做出類似搜尋+字詞提示的功能
假設,今日我瀏覽過一個汽車網站,我也許只要在 OMNIBox內打上 C.. 就會出現該網站的URL..

* NEW Tab的處理
不同於browser的home or 空白頁設定
Ghrome依 user 在 OMNIBox的輸入及瀏覽歷史,在 new tab 內會呈現出
最常光顧的站台 & 搜尋供user直接點選

* 提供privacy mode(無痕模式)
即,提供一個readonly 的瀏覽環境,google 會在該chrome tab(process)關閉後清除所有資料
(包含 cookie, brows history....)

* 針對 malware / phishing site 的處理
- SANDBOX設計 讓browser被攻陷的機會降低
- 持續自動更新惡意網列表

* Google Gears (Opensource)
為一Browser extention的API,可擴充 browser能力(含 chrome)
以提供更進階的 web application所需
當然,google 也想讓這個東西 變成一個標準
那麼,未來的 web app 與傳統跑在os上的app 的距離會日漸縮小

* Google Lives on the Internet --- google 也希望透過 OpenSource 的無私精神
釋出上述多項技術的opensource 供研究發展 讓 Web 的應用能快速進步

--
以上~ 儘量寫囉 應該也是有不少寫錯的東西啦 :Q


閱讀全文...

2009-02-14

Google Map - Street View 功能


Google 的街景圖示做的真的太細太屌了啦 :)

這是 Google Map從幾年前開始的計劃

早先的 Google Map 先是有衛星圖、接著 加入國界、地區街道標示、地圖後...

更恐怖的這個街景圖是 google 用車子 沿街拍出來的

最早只有美國部分地區有 現在美國應該已經做全了

日本也有很多地方的街景都拍好了 也在google map 上可以看到

台灣則是預計今年會開放這項服務 (這禮拜一 剛好在看到google street view的工程車在信義路上拍 我還故意在他後頭停留了一下... :) )

anyway, 既然日本拍好了 我也去日本玩過 就去找了一下當時的照片...

我只能說 google 太強了... 看看下面的對照你就知...

1. 小樽運河旁-Google 版
google map link


MinChuan比對版:



2. 小樽運河旁-Google 版

這裡是小樽運河,三點鐘方向那間小木屋是 小樽觀光案內所

MinChuan比對版:


一群高中女生班遊吧~ 在小樽運河旁 被我偷拍 :Q

3. 小樽郵局-Google 版



MinChuan比對版:



4. 六花亭 北果樓 -Google 版
google map link


MinChuan比對版:



這兩家賣的菓子很有名哦~ 我也有買說 ;)

------------------------------------------------------------------------------------------------
Google Car 長這樣 (引用自 http://www.ithome.com.tw/itadm/article.php?c=52744)


閱讀全文...

2009-02-12

Google Gadgets 開發介紹


Google Gadgets API 目前提供兩個版本
新的版本使用 gatgets.* 這個 namespace,主要看起來 是加入了 OpenSocail 的功能
舊的版本使用 _IG_ 這個namespace

下列是一些開發的小要點:

A. Gadgets 組成

Gadgets的開發之所以很簡單,是因為 Gadgets只需用一XML文件來描述所謂的Gadgets Spec.
即可完成 Gadgets的開發,在Gadgets Spec.中 除了透過XML 宣告一些屬性供Gadgets Container參照以決定Gadgets的重要特性外(如,這個Gadgets的一些user偏好屬性、tabs的支援、標題作者資訊...等等),再來就幾乎是 html + javascript(AJAX) + css 的開發了

下列是一個Gadgets Spec XML 的長像...



B. Gadgets內的程式碼來源 主要是由 content type 這個attribute所決定

* Content type = html 時
- 將 html/javascript/css/...等直接寫在 gadget spec. 內 (該XML檔案)
- 只能包含 body 內的東西 不含 head/title...等外層element
- google 建議使用這種,此種做法 gadget 除在 iGoogle可用外,其它support gadget的container亦可使用(如, Google map, Orkut, YouTube, ...)
- 內含的 html 要用 CDATA 包起來


* Content type = url 時
- gadget 的血肉,是透過 url 去參照另一個網路上的html文件
- 只能在 iGoogle中使用

C. 使用者偏好設定

- 透過  可定義gadgets的偏好設定選項,目前提供 bool, list, string, enum等型別
只要在 gadget spec 內定義好,屆時佈署於gadgets container時,gadgets container即會render出
這些偏好選項供user設定,並可被 gadgets的主體程式所參照引用。
- user preference可設成share,即 可透過這個特定 在不同user中 share資訊
- 由gadgets container來管理/儲存 針對各別gadgets user的 UserPref設定,開發者無需介入處理

D. 佈署及安裝
- 佈署: 將撰寫好的 gadgets spec (一個XML檔案) upload到internet上的任何一處即可
- 安裝: 使用者在Web Container上,新增一gadgets並給定該gadgets spec的 URL即可完成
E. 測試 & 除錯
- 因為deploy只是一個upload xml 的動作,所以我是隨便找一個web container(即, blogspot)來測試開發出來的gadgets
- 可利用firebug之類的browser addon 來進行 gadgets的除錯 (通常是 javascript 的問題)

F. 範例
寫了一個簡單的 Feed Reader gadgets,可透過 UserPref來設定抓取的 feed lists URL
並將Feed內項目的 title, link, summary 資訊show出

Gadgets Spec(source code)置於: http://minchuan.wang.googlepages.com/MinChuan_RSS.xml
呈現面如下:



Reference:


閱讀全文...

2009-02-11

ASP.NET AJAX Framework 過於肥大之問題解決方案 (ScriptMode, ScriptingScriptResourceHandler)


專案內的同仁,有使用 VS 2005 or VS 2008 進行 ASP .NET的 Web 開發作業
其中,亦有引用到 Microsoft 提供到的 ASP.NET AJAX Framework 功能
在實際上線的過程中,卻發現 該 AJAX Library異常的肥大(與 jQuery, Prototype, YUI ...等相比)
可能會影響到 client 端針對該 js file之 download time
所以,針對此議題 內部做了一些survey,就 .Net 提供的 javascript file之size縮減方案分別可就 java script file本身size縮減及http transport layer之壓縮技術說明如下:

1. ASP.NET AJAX Framework Java Script file size 縮減

參考 MSDN 文件說明: http://msdn.microsoft.com/en-us/library/bb344940.aspx
可知,透過 Web.config 內的 ScriptMode 及 Compilation Debug 兩個設定值,決定提供予client端下載的script版本

- debug 的版本 可能debug的資訊比較完整,且 js 檔案不會將空白、換行移除 (未壓縮前的size大)
- release的版本比較精簡 但,所提供的 function 應該都是一樣的 (未壓縮前的size小)

參考資訊:
ScriptManager Class: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.aspx
ScriptMode Enumeration: http://msdn.microsoft.com/en-us/library/bb344940.aspx


2. HTTP Compression

透過HTTP Compression的技術,在傳輸層進行壓縮,以達到傳輸資料量縮減的目的
前提是,client端的browser要支援gzip or dflate的解壓縮功能(此部分,.Net 係透過client端送出的http request header內容來判斷對http compressoin壓縮的支援度)



此部分,看來 MS知道自已的 JS Library真的太肥了,所以預設值即是啟用壓縮
若要將壓縮功能關閉或是想要知道更細部的資訊,可參照下列資訊

ScriptResourceHandler Class: http://msdn.microsoft.com/en-us/library/system.web.handlers.scriptresourcehandler.aspx
ScriptingScriptResourceHandlerSection.EnableCompression Property: http://msdn.microsoft.com/en-us/library/system.web.configuration.scriptingscriptresourcehandlersection.enablecompression.aspx


閱讀全文...

2009-02-06

外交部 - 有禮走天下網路有獎徵答活動


外交部的活動 - 有禮走天下網路有獎徵答活動

其實內容做的不錯,把一些常見且重要的禮儀上網 裡面提供的資訊 我還滿推薦的

P.S 還有抽獎活動哦 :)


閱讀全文...

2009-02-04

翻譯筆記 - TransNote


翻譯筆記 - TransNote (http://www.transnote.org/) 是 ITRI(工研院)的一項 project

這個小工具的功能,不像其它網站/工具提供的「全文翻譯服務」,也不項某些 翻譯軟體或browser plug-in提供的「User滑鼠指標指到的文字 進行即時的翻譯」功能

而是提供所謂「翻譯筆記」的功能

所謂的翻譯筆記,使用起來會很像大家在讀原文書時,若有些單字看不懂,會在查完字典後將所查的中文解釋註記在書本上

個人覺的這個功能感覺很不賴,雖然本人非該工具的重度使用者,但是還是分享予讀者

有可能對原文文章的閱讀有一定的幫助,當然不能完全拿來做為學習英文的方法,畢竟一個單字的用法是很多種的...

TransNote 目前使用方法如下:
1. Copy 一段原文文章至 Transnote 網站
2. 點選「開始閱讀」
3. 在欲翻譯的文字上 double-click,則該英文生詞即會注記在文字下方,再double-click一次,即會取消該註記

以下是我拿「歐巴馬就職演說」的英文原文做為範例,所示範的效果:



翻譯筆記做完後,可在線上存檔或儲存到電腦內(目前儘提供 html 格式),算是小貼心的設計。
目前翻譯筆記的功能應該只是在試驗階段,所以原文的內容需由 user copy & paste 上去,並無法引用特定Url的內容,當然 也未保留文章內容原本的html格式。


閱讀全文...

2009-02-02

Office Addin 開發經驗 (using VSTO)


因為Office為常用的辦公室軟體工具
懶得做重複事情的我 當然會想看看 到底有沒有辦法在 Office 的應用裡面 加上我自已的功能
用來處理一些很Routine、重複操作的事情 ?

其實 以前已經有使用 VBA 來客製化 Excel, Word 的功能

不過,必竟 VBA 的 DEBUG 相當的麻煩,且開發環境較不便利、語言也較不熟悉

所以,找到了另一個方法

透過 VSTO(Visual Studio Tool For Office Development)這工具
即可透過 VS 2005 用自已喜歡的語言 來開發 Office Addin

*** 開發的過程中,只要新增一個 Office Addin 的專案,再依 office object model (寫的很差的一堆文件)來開發即可



*** 安裝的過程,會比較麻煩,先簡單列出我遇到的問題
1. 開發時 用Debug mode執行的話,addin 可順利裝至 outlook

2. 開發完時,用 install 的 .msi 檔案 install 完後啟動outlook,發現 addin 無法順利載入,但又無對應的 Error Message 用來除錯,經過我在網路上尋找一些答案後,就我遇到的問題,分別說明解法如下:

a. DEBUG方法: 在 deploy 到 outlook 測試時,若 addin 有問題 or 無法載入,其實 根本看不到啥錯誤訊息,此時 可在系統環境變數加上,相關的訊息就會 show出、Log起來,這個功能 實在非常有用哦 :)

SET VSTO_LOGALERTS = 1
SET VSTO_SUPPRESSDISPLAYALERTS = 0

b. Client 要安裝 Microsoft Visual Studio 2005 Tools for Office Runtime
否則,outlook 沒有辦法存取要 load addin 用的 proxy 檔案
C:\Program Files\Common Files\Microsoft Shared\VSTO\8.0\AddinLoader.dll

Download Url: http://www.microsoft.com/downloads/details.aspx?familyid=F5539A90-DC41-4792-8EF8-F4DE62FF1E81&displaylang=en

c. Client 端的Office要安裝 .Net 程式設計支援 (安裝 office 時 預設沒裝)
否則,會遇到 遇到下列問題: Could not load file or assembly 'Microsoft.Office.Interop.Outlook, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. 系統找不到指定的檔案。



d. Client 要grant(允許) 該 addin 的執行,以我為例 我是到 .Net Framework 2.0 的目錄下,下這樣的 command

---> cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>
---> caspol -u -ag All_Code -url C:\Program Files\USR\MinChuan_OutlookAddinSetup\* FullTrust -n "MinChuan_OutlookAddin" -d "This is MinChuan_OutlookAddin"

否則 會遇到下列問題:
Could not load file or assembly 'MinChuan_OutlookAddin, Version=1.0.0.0, Culture=neutral,

PublicKeyToken=null' or one of its dependencies. Failed to grant permission to execute. (Exception from

HRESULT: 0x80131418)

e. Client 要安裝 .Net Framework 2.0

*** 參考資料 ***

  • MSDN 裡面, search VSTO or outlook, excel, word ... 等,可以找到一些範例


閱讀全文...

2008-12-29

Outlook Automation


因為gmail實在太強了 所以 想把所有的信 都用gmail的當做備份+搜尋的地點

因為,公司的mail 有自動轉寄功能

所以,先前設定所有寄給我的信 都會轉到我的 gmail 帳號一份

但是,針對自已寄出的信 就沒輒了~

基本上 想的方式是這樣:

* 每次寫信 or 回信時 把 gmail account 加到 BCC 內 再寄出

不過,每次都要加 也很煩人(且 outlook 要加 bcc 比較麻煩)

so, 就想說 excel 的 macro 有沒有辦法做到

基本上,就滿簡單的

基本想法如下:

方法A: 自訂寫信、回信的功能,在 outlook 裡面 去定義 macro並編輯它
會進入 VBA 的程式寫作介面,在裡面 去定義macro要做什麼事
舉例來講,我定義了這樣一個函式後,再到 outlook 工具->自訂->指令 把這function加入 outlook 的 menu,以後 我只要點這按鈕,就會啟動一個新信件編輯視窗,並且 default就有bcc 自已~ 很簡單吧

Sub MinChuanNewMail()
Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)
myItem.BCC = "minchuan@cht.com.tw"
myItem.Display
End Sub

不過,回信的部分 要處理 就要再研究一下

方法B: handle outlook 發信的 event - 在 發信前 將 gmail account 加到 bcc

基本上,針對 ThisOutlookSession 這個 Application object的 event 進行 handle 就行了
像是這樣:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Item.BCC = "minchuan.wang@gmail.com"
End Sub

夠簡單吧!!

不過,這個有一個問題
Default 這樣的巨集 會被outlook停用 ><~
所以 暫時解法是 將 macro 的信任等級調低
不然,就可能要透過 macro sign 的機制,把macro簽署過 這樣outlook 才會信任 :Q

--
reference: http://msdn.microsoft.com/en-us/library/aa246142(office.11).aspx


閱讀全文...

2008-12-28

Introduction to Google Apps


今天閒來無事 想說 來研究一下 GAE(Google Application Engine, http://code.google.com/appengine/)

其實,GAE 就是 hosting 的概念,由 Goole提供web computing related resources, 讓end-user開發的程式可以deploy在上面,目前支援由python開發的程式,並且 也有google proprietary的db可以供使用哦~

不過,沒先看GAE 倒是先找到了一個叫 Google Apps的東西(http://www.google.com/apps/intl/en/business/index.html)

這個東西的話~ 就是 Application Service Provider(ASP)的概念,google提供給組織層級的service(例如,email, calendar, docs, chat, sites...)

說白一下,假設 現在我開了一家公司,但是 我不想維護公司自已的 mail server 及其它應用系統,但是 又想讓我這家公司的員工 都有自已的email帳號 如 xxx@chuan.com、個人的網頁 如 xxx.sites.chuan.com 這怎麼辦 ?

google 提供了這樣的一個服務(有免費版 及付費升級版)

做法很簡單

1. 先到 google apps 去申請使用,過程中 會問你組織的 domain name為何
我的例子是用 minchuan.co.cc
2. 接著 google 會要你去證明你是 minchuan.co.cc 這個 domain 的 owner
證明方法很簡單,只要在 minchuan.co.cc 這個domain下面,加一筆 cname record 指到google 即可(google 會有一個類似驗證碼的機制來 mapping這些設定,以我的例子 google叫我加了一筆 google4e740b3f14f0a2b7.minchuan.co.cc 的 dns record 指到 google),透過這方式 可以確認 你的確是這 domain 的 owner

Domain Name Type/Pri Value
-------------------------------------------------------------
google4e740b3f14f0a2b7.minchuan.co.cc CNAME google.com

3. 上述確認後,接下來如果你要讓 google 提供你 mail service
一樣,只要在 minchuan.co.cc 的 dns record 裡面,加上數條google 提供的 MX record記錄,這樣 以後寄到 xxx@minchuan.co.cc 的信 都會因為這些 MX record 的關係,寄到 google 的 mail server 以下是 MX 的相關設定

Domain Name Type/Pri Value
-------------------------------------------------------------
minchuan.co.cc MX 1 aspmx.l.google.com
minchuan.co.cc MX 5 alt1.aspmx.l.google.com
minchuan.co.cc MX 5 alt2.aspmx.l.google.com
minchuan.co.cc MX 10 aspmx2.googlemail.com
minchuan.co.cc MX 10 aspmx3.googlemail.com

4. 另外,也有考慮到讓你組織的各個用戶 用比較「公司化的domain」來登入google的服務
例如,你想讓user以 http://mail.minchuan.co.cc 來登入他們的 web mail及其它服務時
(default google 是提供這種網址: http://mail.google.com/a/minchuan.co.cc )
若你加了下述的 dns record,就可以讓 user 以這樣的 url 來登入使用服務

Domain Name Type/Pri Value
-------------------------------------------------------------
mail.minchuan.co.cc CNAME ghs.google.com

5. 以上~ 還滿不錯的 適合小公司來使用

6. 附註: 目前我是使用 www.co.cc 提供的 dns 服務
他可以讓你擁有一個 domain 並且管理該 domain 下面的 dns record 哦~
BTW, 這個服務 好像有點不穩 ><~


閱讀全文...

2008-11-04

WSS 客製方法 (Windows Sharepoint Services)


專案使用了 Windows Sharepoint Services 已經有五年的時間了

最初是我建置+管理

目前 已經將它移交給別人管帳號跟系統

最初只有 for 單一個 project 使用

但,又不想使用 MS 提供的畫面及Template,所以 在 93年時,用硬幹的方法
修改MS的aspx檔案:
C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\1028\STS\default.aspx

把它改成這樣:



在 WSS 當中,有主網站、子網站的功能

主網站目前是 for GSP Project 使用
子網站曾經有提供給 GSN 使用
目前要再加一個「農委會客服」的案子

但是,專案一多 這單一個客製檔案 沒辦法 for 其它專案使用

偏偏,WSS 又無提供為每個 Site, SubSite 客製首頁的功能(要做到很細 不是只有加 Web Part而已...)

因為目前我們的 WSS 我已經把它轉到 VM 上,最初的想法 是想透過 VM 的複製,針對每個Project就給它一個 VM,也實際做出來了
但是,VM 還是要有管理、上Patch、甚至申請public / private IP 的需求
會加重原本系統管理的負擔

so, 最後 終於試到一個辦法, 使用 office front page extension 的方式,居然可以直接針對子網站去做網頁的編輯

這大概是最適當的作法了 :)

下面這個 site, 就是我下午客製出來的哦 :)


閱讀全文...

2008-11-03

MS SQL Server 2000 Audit


最近因為公司的資安查核,所以 研究了一下 MS SQL Server 2000 要如何建立稽核軌跡(Audit Trail),大概找了幾類的方法,整理說明如下:

------------------------------------------------------------------
A. enable SQL Server login audit (through SQL Server Enterprise manager)
------------------------------------------------------------------

ref: http://www.microsoft.com/technet/security/prodtech/sqlserver/sql2kaud.mspx

notice: SQL Server 要重啟才生效
login audit 資訊會寫在 windows 的 app event log 裡

1. 在這個畫面做設定,安全性 -> 選要做 Login 的稽核層級為何



2. 重啟SQL Server

3. 接著,後續的login記錄,就會記錄在 windows event log 內 (歸於 application這個類別)



------------------------------------------------------------------
B. enable SQL Server 「c2 audit mode」:
------------------------------------------------------------------

ref: http://www.microsoft.com/technet/security/prodtech/sqlserver/sql2kaud.mspx

SQL Server 內建有一 C2 audit mode, 預設是沒打開的

打開方式如下:
1. 在 command mode 裡下下列的指令
C:\Documents and Settings\Administrator>osql -E
1> exec sp_configure
2> go

1> exec sp_configure 'c2 audit mode','1'
2> go
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。
設定選項 'c2 audit mode' 從 0 變更到 1。請執行 RECONFIGURE 陳述式來安裝。
1> reconfigure
2> go

2. 重啟 SQL Server
3. 接著,SQL Server即會以 c2 的標準做 log, log 檔會以 .trc (trace)存在
C:\Program Files\Microsoft SQL Server\MSSQL\Data 下
4. .trc 可用 sql profiler 來看
5. 目前正在錄的 .trc 無法直接開,可先將 sql server restart 後,該 .trc 即可開啟
.trc 檔會做 log rotate,被rotate 掉的 .trc 也可以直接開來看

效果如下,可以稽核 對DB的一些Command及登入資訊,不過使用這種方式要注意,它可能會拖慢DB的速度,所以若要打開此選項,一定要先測試過,看看目前的交易量及設備容不容許將這選項打開。



另外,何謂 C2 等級的 audit log?

根據美國國防部的一個標準:
DoD 5200.28-STD, "Department of Defense Trusted Computer System Evaluation Criteria"
http://www.boran.com/security/tcsec.html
有將電腦系統依安全的程度,分為下列等級,C2即是其中的一級:

* DISCRETIONARY PROTECTION
Class (C1): Discretionary Security Protection
Class (C2): Controlled Access Protection
* MANDATORY PROTECTION
Class (B1): Labeled Security Protection
Class (B2): Structured Protection
Class (B3): Security Domains
* VERIFIED PROTECTION
Class (A1): Verified Design
Beyond Class (A1)

C2何底要求為何,依該標準,簡述如下:
Systems in this class enforce a more finely grained discretionary access
control than (C1) systems, making users individually accountable for their
actions through login procedures, auditing of security-relevant events, and
resource isolation.
實際的要求,要來的細的多,要參考該標準文件才行。

------------------------------------------------------------------
C. 使用 Server Side Trace 的功能 來客制 trace 有興趣的 sql server operation
------------------------------------------------------------------

ref: http://www.microsoft.com/technet/security/prodtech/sqlserver/sql2kaud.mspx
(與 SQL Profiler 原理一樣)

其實,這就好像用 SQL Profiler 一樣,選自已有興趣的event,來錄製相關的

上述的 C2 log 也是用一樣的原理,差別在於 C2 audit log 是 SQL Server建好的套餐

如果覺的那樣的 log 太多了,則 你以用 server side trace 的方式,來挑想log的部分記錄即可

------------------------------------------------------------------
D. 使用 DBCC command --> 但是 結果很難看.. 不是人可以看的
------------------------------------------------------------------

指令: DBCC log ( {dbid|dbname}, [, type={0|1|2|3|4}] )

PARAMETERS:

Dbid or dbname - Enter either the dbid or the name of the database in question.

type - is the type of output:

0 - minimum information (operation, context, transaction id)
1 - more information (plus flags, tags, row length)
2 - very detailed information (plus object name, index name, page id, slot id)
3 - full information about each operation
4 - full information about each operation plus hexadecimal dump of the current transaction log's row.

by default type = 0

可以下下列的指令試看看

DBCC log (master)
DBCC log (master, type=4)

效果如下:



------------------------------------------------------------------
E. 使用SQL Server 2000 內一個沒被寫在文件的function: fn_dblog
------------------------------------------------------------------

-- entire tlog
select * from ::fn_dblog(NULL, NULL)
-- selection of tlog
select * from ::fn_dblog('129:148:1', '129:150:6')
Note: 129:148:1 is LSN

Select * from ::fn_dblog('', '') where [Begin Time] >= '02/03/08'

------------------------------------------------------------------
F. 使用 3rd party tool, 來觀看 SQL Transaction Log - 以 Lumigent Log Explorer for SQLServer 為例
------------------------------------------------------------------

用上述的 DBCC, fn_dblog 內建指令,很明顯的 雖然可以 Query 出log,但是,那些log
根本就不是人可以看的懂的

但是,MS 官方也沒有這種可以讓人看Transaction Log的工具 (真怪)

所以,只得求助於 3rd party 軟體

將 Lumigent Log Explorer for SQLServer 的 cliet 端、Server端(需與SQL Server裝在一起)裝好後,即可針對 Transaction log做查看分析的動作、還可以把單獨的Transaction挑出來、Rollback 哦 :)

另外,這個軟體,只是幫你 parsing transaction log,所以非transaction類的部分(如, Query的操作) 沒有辦法呈現出來。
若要 Audit 到對 DB 的 insert/update/delete/query ...的話,則要打開 c2 audit mode 或是使用 server side trace or sql profile 來記錄相關的操作

Demo 畫面如下:


閱讀全文...

2008-09-18

Soring Algorithm - Python Implementation


最近在看Python

剛好上次竹講了一堆sorting 的 algorithm

由於 我忘了差不多了 所以呢~ 再複習一下 順便用 python 來 implement

做了, QuickSort, MergeSort, HeapSort
為何叫 QuickSort --> 看程式碼的長度就知 它是 O(nlogn)排序法裡 程式碼最簡單的吧 :Q 哈

Python 寫出來的程式,有沒有比較整齊乾淨啊~ 呵呵

Quick Sort:


Merge Sort:


Heap Sort:


閱讀全文...