2009-09-24

Firefox Plugin - Read It Later! (書籤管理、共享及同步工具)


Read It Later 是一個 firefox 上的 plug-in

對我而言,它幫我解決下列的問題

1. 因為很貪心,所以 常常在 firefox 上開了一堆 tab、有一堆待看的文章,但是這些文章都沒消化掉
若是就留在 tab 上面,每次 firefox 開啟時自動 reload 又很佔memory resources
若是把每個都 bookmark 起來一再關掉tab,這樣雖然節省資源 但操作起來又很費工 而且容易忘記閱讀、 bookmark也很容易髒掉

read it later 讓你在「留在 firefox tab」以及「bookmark」中取得一個平衡點
也就是,新增了一個 「待讀列表」的bookmark類別,並可透過該 plug-in 很容易的管理

2. 我有好多台電腦,散佈在家裡、公司,但是 待看的文章也是散佈在各台電腦的 browser tab 記憶內
透過 read-it later 的同步功能,只要在各台電腦上設定 read it later 伺服器上相同的帳號、密碼 就可以透過 read it later 伺服器來同步這些待讀的清單,且 這個帳號、密碼並不用申請 要產生多少 就有多少,是不是很方便呢 ?

3. read it later 與 google book mark 的比較
當然 透過 google book mark 也可以在不同的電腦裡面share同一份bookmark
不過,基於下述理由,我是兩套工具並用:
a. bookmark 是經過消化吸收後 才納入的,與未經消化及閱讀的項目是不同層級的資訊
b. read it later 的同步功能,會把各台電腦的 to-read list upload 到 server, 再download 到 client 變成 local list,在使用上 不用都透過 web、網路 來存取這些 list,相對的速度會較快
且在呈現上,也可依加入待讀列表的時間、網站的位置 等屬性來做排序呈現
雖只是簡單的小工能,但是 卻大大的給了我們方便呢 :)


閱讀全文...

Microsoft SQL Azure 連線方法(Cloud Computing, 雲端運算)


在前篇文章初淺的介紹了 SQL Azure(原名為 SQL Data Services) 及其申請方式

本篇文章,將介紹 SQL Azure 的連線方法

SQL Azure 提供 DB Service 方式,與 Amazon Web Services 的 Simple DB 類似,可以只用 Database 的 service (不過 存取的命令就不同了, Simple DB 是透過 REST or SOAP Interface, 而SQL Azure 則是透過 OLE DB/ODBC/ADO.NET 並透過 T-SQL 語法來存取)
而與 Google App Engine 的模式不同,Google App Engine 內建的 Database 不能單獨存取,只能透過佈署在 App Engine 上面的 Application 存取

既然可獨立存取,所以 想當然爾,運用 Microsoft Cloud Computing 開發 Web Application就會有兩種模式

A. Web Application 佈署在 Windows Azure, 並由 SQL Azure 提供 Database Services
B. Web Application 佈署在 自家環境, 並由 SQL Azure 提供 Database Services

然而,不管使用哪一種模式,Web Application 都是透過傳統 SQL Server 的 1433 port 來存取SQL Azure

所以囉,若是 Web Application or Developer 在 firewall 裡面,對外的連線被管制的話,那麼 使用上述 A 模式會是比較便於開發的

在前篇章提到,若是成功申請 SQL Azure Services後,會提供你三種連線方式的 Connection String



不管是哪一種,簡單來講 該 services 就是 listen 在
tcp:servername.ctp.database.windows.net:1433 這個位置

只要你用對連線的方法 (ODBC, ADO.NET, OLE DB) 且對外的網路通暢,應該就能順利存取

1. 初次使用,最常試的應該會用現有的 SQL Server 2008 SSMS 管理工具來連結,雖然 SQL Azure 與 SQL Server 並不完全相容,但是 使用 SSMS 還是可以順利連上

只要在連線至伺服器處(Connect to Server)
server name的地方輸入 [你的sql azure server name].ctp.database.windows.net
帳號則是要輸入 [你的sql azure帳號]@[你的sql azure server name]

連進去後,會出現一些錯誤訊息 (這是因為 有些功能 SQL Azure 與 SQL Server不相容),不要理它
進去後雖然 object explorer 不能用,不過 可以透過 新增查詢(new query) 的方式來進行 SQL command 的下達,這是沒問題的

step-by-step 的操作,可以參考 http://blogs.msdn.com/jimoneil/archive/2009/08/18/sql-azure-ctp-1.aspx

b. 可以使用 SQLCMD 這個 DOS 下的工具來做連線及管理
這個工具位於你 local 的 SQL Server 安裝位置的 \Tools\Binn 資料夾下

以下是簡單的 demo:

連線:

sqlcmd -S [servername].ctp.database.windows.net -U [username]@[servername] -d [database name]
密碼:

下命令:

1> -- 先建立 table, 注意 在 SQL Azure 上面的 table, 一定要有 clustered index
2> -- 這應該是因為 SQL Azure 會自動幫你做 table partitioning 以提供 scalability 能力的緣故
3> create table jobs
4> (
5> job_id smallint identity(1,1) primary key clustered,
6> job_desc varchar(50) not null
7> )
8> go
1> -- 塞一些簡單的資料
2> insert into jobs(job_desc) values('manager: this is job titled manager')
3> go

(1 個受影響的資料列)
-- Query
1> select * from jobs
2> go
job_id job_desc
------ --------------------------------------------------
1 manager: this is job titled manager

(1 個受影響的資料列)
1>

3. 透過 ODBC 的方式連結,使用 windows 的 ODBC 資料來源管理員
一樣,輸入 server 位置、帳號、密碼後 進行連線
只是,在進行連線測試時 要嘛就出現「網路錯誤」的message 又嘛就出現類似下例的錯誤,
所以 個人目前使用 ODBC 連線 是沒有成功過的

Microsoft SQL Server ODBC 驅動程式版本 03.86.3959

執行連線測試...

試圖連線
連線已建立
查證選項設定
[Microsoft][ODBC SQL Server Driver][SQL Server]Built-in function 'databasepropertyex' is not supported in this version of SQL Server.
與伺服器中斷連線

測試失敗!

4. 透過 ADO.NET 來連線,只要 connection string 的設定正確,是可以正常用 ADO.NET 來存取到的,但如果你是在公司內部開發,那麼要注意對外連線 1433 port 是否有被 firewall 阻檔

5. 透過 3rd party tool
可能是目前很多人遇到 SQL Azure 的連線問題,所以 有個公司開發了一個 Web 的小工具,透過它來連線到您的SQL Azure Server Instance

這篇文章是這個工具的使用介紹: http://www.cerebrata.com/Blog/post/Browser-based-SQL-Azure-Explorer.aspx

基本上,只要先連到 https://onlinedemo.cerebrata.com/SQLAzureClient/default.aspx
輸入:
database name:
username:
password:

後,就會透過該介面連到您的 SQL Azure Server
好處是,因為是 透過該網站中介連過去的,所以 就算你人在 firewall裡面,還是可以透過這個圖形化的工具來管理
壞處當然就是,因為是透過對方中介,所以 你的 帳號、密碼以及中間的使用過程 都能很輕易的被該中介站給攔劫使用

所以,若是要拿來做非測試的用途,還是不建議使用這樣的方式,資安的風險會較高


畫面如下:








* 相關文章: Microsoft SQL Azure 初步介紹及申請


閱讀全文...

2009-09-23

Microsoft SQL Azure 初步介紹及申請(Cloud Computing, 雲端運算)


繼 Amazon Web Servcies 提供的 EC2, S3, ... 、 Google App Engine(GAE) 提供的 cloud computing(雲端運算)平台後,Microsoft 也開始準備提供類似的服務
其中,包含主要可佈署 ASP.NET Application 的 Windows Azure、.NET Services 及 SQL Azure.. 等

其中,SQL Azure 主要是提供傳統的 SQL Server 服務,只是 運算資源及管理平台 都統一由 Microsoft 來提供,也就是說 使用者向微軟申請 SQL Azure 的服務後,微軟會在他的 cloud computing 環境當中,為你建立一個 SQL Azure Server instance 並提供你使用,當然 該 SQL Azure Server 也是透過 port 1433 來存取的 只是SQL Azure Server 的版本較為客製化,連線及使用的方式 會與傳統使用 SQL Server的方法有點小小的差異,至於該 SQL Azure Server 所需的硬體、軟體資源、機房、頻寬的管理 都統一由 Microsoft 負責,未來正試使用後 會依你的使用量來收費(Utility Computing 的觀念,未來應該會依 DB 使用量、Query 數量、CPU使用量... 等值來做對應的收費)

下列先介紹 SQL Azure 的申請方法:

1. 至 http://www.microsoft.com/azure/register.mspx 申請 SQL Azure 的 CTP (Community Technical Review) 使用權

2. 申請完後,Microsoft 會寄一封含試用碼(invitation code)的信件給你,內容大概如下

1) Visit https://sql.azure.com
2) Sign in with a valid Windows LiveID
3) Enter your invitation code
Your invitation code is: 6fb28cf2-xxxx-xxxx-xxxx-a098ae31807a
4) Create your SQL Azure Server (and databases)

3. 依信件指示,login 至 https://sql.azure.com, 登入後畫面類似如下
在第一次登入時,會讓你輸入 invitation code 並以建立一個 SQL Azure Server instance, 其中有一些 管理者帳號、密碼以及這個 SQL Azure instance放置的地點... 等選項需設定
(目前只提供 USA 這個地點供選擇,未來應該會提供各地域,供你選擇網路距離較近的 Server,亦會提供多地域的 clustering 的機制)



4. 上述畫面,按 manage 則可開始管理這個 Microsoft 提供給你的 SQL Azure Server instance
在畫面上,你會看到 微軟提供給你的 server name
未來,要存取這個 SQL Azure Instance 的話,就統一會透過 servername.ctp.dat
abase.windows.net port 1433 來存取



5. 上述畫面可以 建立、刪除 該 instance 上面的 database, 但目前也僅有這樣的功能
其它針對 database 的管理( table creation, view, stored procedure, trigger, ... 等等的建立)都需透過SQL Azure 提供給你的 connection string 透過外部的tool或程式來進行管理

目前提供三種連結方式: ADO.NET, ODBC, OLE DB
但 很遺憾的 目前若要直接用 SQL 2008 的 SSMS 來管理的話 表面上會預到一些小問題,但實際上是可以用的
用 ODBC 連的話,個人在家裡 是還沒成功連上過
ADO.NET 確定沒問題
在下一篇文章內,將會介紹用 SSMS 以及 SQLCMD 來連線管理的方法。



* 相關文章: Microsoft SQL Azure 連線方法


閱讀全文...

2009-07-20

網頁效能調校方向及工具 (Web Performance Tips & Tools) - YSlow, Google Page Speed


從Tim Berners-Lee發明WWW以來,Web已經過17、18個年頭的發展
其成長速度 是呈指數型的爆炸性成長
Web的爆炸性成長 讓Browser變成每人每天最常使用的軟體、介面
從最原始的資訊呈現用途 到現在成為一應用程式的平台
從 HTML5, O3D, Native Client, Chrome OS, ... 都可以感覺到,未來的Web 只會更重要...

一個好的網站 在效能面 是非常重要的
如果網頁回應速度太過、呈現速度太慢 即使有好的應用、好的內容 但還是會被使用者所唾棄。
那到底要怎麼建構一個效能佳的網頁? 有什麼好的實務作法(BestPractice)? 有什麼工具可以幫忙檢查?

下列的參考文章,分別是Yahoo & Google針對網頁開發在效能面的最佳實務作法說明,這些文章 提示了網頁開發者一些效能提升的重點(如: 降低Http Request 數,減少網頁及網頁組成之Size, Cache的使用, Http Compression的使用, Content Delivery Network的使用, 網頁及網頁組成在Server端的分散佈署, JavaScript、CSS 在網頁上的放置位置, ... 等),從基本的觀念、到建階的方法,資訊非常的完整且值得參考,對於網頁效能提升有興趣的人,絕對值得一看!!

此外,Yahoo 及 Google 也各自依各自所提的網頁效能的要點,製做了檢查、分析的工具,讓網頁開發者透過該工具即可很快的知道自已的網頁在效能上還有什麼需要調整改進之處(會產出recommendation report)。這兩個工具分別的 Yahoo YSlow(Firefox的plugin)、Google Page Speed(Firefox上firebug的plugin),順便一提,在這部分 Yahoo 的資訊分享及工具都比Google還快,Google在這點看來,是me too、是follower :Q 不過 看來 這兩個東西 都跟 Steve Souders有關... Steve 原本在 Yahoo 工作時 發展了YSlow,但 後來跳槽到Google ...
另外,若只是想單純的check 每個網頁、網頁組件的下載速度,Http Watch這個工具,也值得一試。


參考文章:
Yahoo: Best Practices for Speeding Up Your Web Site
Google: Web Performance Best Practices

檢測工具:
Yahoo! YSlow
Google Page Speed
Http Watch

以下,是拿 udn.com (聯合新聞網)為標靶,用YSlow, Google Page Speed來看看這個新網網站的首頁有什麼需要加強的部分 :Q 也讓讀者感受一下,這兩個Tool的威力..

YSlow:



Google Page Speed:




閱讀全文...

2009-07-15

[Notes] The Continuing Metamorphosis of the Web - 未來10年Web的發展重點


今年在馬德里舉辦的 18th WWW Conference
Google 的一位副總 Alfred Spector(VP Research and Special Initiatives)以The Continuing Metamorphosis of the Web為主題,提出他對未來5-10年Web的發展方向的看法,整個演講的主軸在於未來Web發展的三大方向 ---

1. Totally Transparent Processing
2. Distributed Computing
3. Hybrid, not Artificial, Intelligence

摘要如下:


1. Totally Transparent Processing
將 文字、圖片、聲音、影像 這些以不同形式存在的資料源、輸入
經過轉換後視為一體來處理、關聯
如: Voice Search, Translation, Voice to Text, Image Search, Image Recognition, ... 等應用,感覺非常的偉大。

2. Distributed Computing
Cloud Computing 為目前非常紅的東西
也可說這是 Web or Computing 演進到現在 而自然的一個產物
為了系統的scalability, performance, latency, resource utilization, availability, cost, ... 等考量,提供的運算資源要能快速的長大並易於管理
cloud computing 因應而起
Amazon E3, Google App Engine, Microsoft Azure, ... 等並提供這樣一個運算環境及商業方案

順待一題,過去幾年很火熱的Grid Computing, Utility Computing 早已萬佛歸宗
目前針對這種分散式的運算 Cloud Computing 算是一個共用的名詞了

3. Hybrid, not Artificial, Intelligence
這裡主要是講,除了傳統的人工智慧外,新的看法是混入「人的智慧」,也就是user-feedback or 利用user產出的資料來提供電腦運算時的「智慧」能力
像是 google translation, 最早期是用 RBMT(Rule-Based Machine Translation),
到目前已經是純用 SMT(Statistical Machine Learning)的方法來做機器翻譯。在圖形的關聯性也是,Google 已經在image search裡面埋下user feedback的機制,透過眾大網民的力量,建立最有效的關聯性資料。

以上~ 大概做的一些摘要,很多都非我專業領域,若有錯誤 可以指正、一起討論 :)

參考資料:
簡報: http://www2009.eprints.org/214/1/www2009azsv4FinalV3.pdf
簡報及影片: http://videolectures.net/www09_spector_cmw/


閱讀全文...

2009-07-09

第十張證照.. 感覺很空虛


上班後這幾年,斷斷續續的拿到了一些證照,今天剛好拿到第10張
其實,就我而言 拿證照 好像不會給我帶來什麼幫助
當我覺的拿證照很無聊時 又會閒個一兩年不去理他
這幾年 做很多事 都好像很沒有毅力...

曾經為了鍛鍊coding&problem solving 能力,開始在 UVA online judge 做 ACM 的程式題目
但也是斷斷續續,上一次 submit 通過 可能已經是一年多前的事了
完成的題數停留在59題很久了

投資理財也是 曾經連續多很多時間在看書、研究 現在也停了

技術面也是 只要是口碑好 popular 的技術, tool, methodology 就會涉獵一下
但 也因為時間的關係 大多看完一、兩本書 玩過了 就換別的 沒有持續 也沒有深入

對太多事情有興趣,一下看那個、一下看這個 太貪心的結果 是造成這個結果的主因吧

下面是我的證照,從 programming, networking, system administration, security, it service management, software quality, project management 的領域都有...

很雜吧 ?

RHCE
SCJP
CSQE
CIW Security Analyst
CCNA
PMP
BS 7799 LA
ITIL V3 Foundation
MCTS: .NET Framework 3.5 ASP .NET Applications
MCPD: ASP.NET Developer 3.5 on Visual Studio 2008


閱讀全文...

2009-05-17

三重先嗇宮(台北縣古蹟)




這是一個古蹟修復工作者的Blog

剛好介紹的是三重的古蹟廟宇 --- 先嗇宮

身為三重人的我~ 真的是有好好的看一下文章的內容

只能說 太專業 太精闢了

若是對古蹟有興趣的話 建議可以看看這個Blog, 真的很讚 :)


閱讀全文...

2009-05-14

Google Server / DataCenter (Google 伺服器 & 機房)


http://news.cnet.com/8301-1001_3-10209580-92.html

這篇文章,說明 google 自製的伺服器 以及 像貨櫃屋般的模組機房設計
強者~ 軟體、硬體 都找最 TOP 的人來做 :Q

- 為了省成本、省電、提升用電效率 在伺服器的設計上 使用PC等級的組件
- 沒必要、沒用到的零組件(e.g., 顯卡...) 絕對不會出現在google server上
- server吃電的電壓與供電電壓一致,以免電壓轉換時的能量秏損
- 自制獨家電池式、內建於server上的UPC不斷電系統
- 使用 software 來補足便宜硬體可靠度及穩定度的不足
- 貨櫃屋般的機房,易於模組化的安裝、移動
- 節能且利用自然能量的機房冷確系統

... 看了就知啦 :)

下面這一則,則是 Google Data Center 的影片
Inside A Google Data Center


閱讀全文...

2009-05-12

MS SQL Table 佔用空間計算


同事提供的方法,
主要是利用到內建的 stored procedure: sp_MSforeachtable

---

CREATE TABLE #TableSizes
(
table_name SYSNAME,
row_count int,
reserved_size varchar(10),
data_size varchar(10),
index_size varchar(10),
unused_size varchar(10)
)
INSERT #TableSizes EXEC sp_MSforeachtable 'sp_spaceused ''?'''
SELECT table_name,row_count, replace(reserved_size,' KB','') reserved_size,replace(data_size,' KB','') data_size, replace(index_size,' KB','') index_size, replace(unused_size,' KB','') unused_size FROM #TableSizes ORDER BY table_name
drop table #TableSizes
go


閱讀全文...

2009-05-11

Google Chrome 影音廣告


下面這隻廣告,是Google Japan Team弄的,會在TV上放送哦 :)


Chrome 廣告合輯(連結)


閱讀全文...

2009-05-08

Google: The 2008 Founders' Letter


Serge Brin 在今年Google年報(annual report)內給投資者的一封信

這是從 2004年開始,每年Larry Page & Serge Brin 開始做的一件事
有點像華倫.巴菲特從1977年開始,每年寫給股東的一封信(Buffet Letters)
從這些信件裡面,可以看到公司經營的大狀況、大方向
以下,是針對 Google 2008 annual report 裡,一些有趣的東西:

------

Web & Search:

1990: CERN裡面的 Tim Bernes Lee 為了資訊的分享,發展了全世界的第一個Web Page http://info.cern.ch/
1992: 世界上有26個web sites 了
1993: 每個新增的Web Site 都會post在這個網址http://www.dejavu.org/prep_whatsnew.htm,這時 大概每天增加一個web site
1998: 世上已有以千萬計的web pages了,此時 也是 google 在standford 開始研究search、甚至成立公司的一個開始點

google 首頁,這幾年來愈來愈簡單化了: http://blogoscoped.com/archive/2006-04-21-n63.html.

Books: 可在線上檢索上千萬本的書籍

Geo: 2004年10月買下 Keyhole(Google Earth的前身)後,後續提供Google Earth, Google Maps等服務

Ads: AdWords於2000年發表,2007年4月以31億美元買下DoubleClick,廣告的呈現也從文字、到影像,每年為廣告主創造50億美元的交易

Apps: Gmail 於2001年於Google 內部開始使用,2004年開放對外並提供1G的信箱空間(有別於當時一般webmail提供的 MB級信箱), 後續的 Google Docs, Site, Calendars, ... 都是架設在cloud computing 環境下的應用

Youtube: 每分鐘 Youtube會有15小時的影片被上傳,相當於每週會有86,000部電影長度的影像被上傳

Chrome: 2008年推出了搭載v8 javascript engine的 Google Browser: Chrome

Android: google 在2005年時買下了這家startup公司,並在2007年將android OS release出來

Atificial Intelligence(AI, 人工智慧):
automatic machine translation: 在 1640 個language-pairs 中做語言的自動翻譯
voice recognition / voice search: 語音辦識, 如 GOOG-411(Google Local Search Search)
search quality improvement: 利用既有data使得search品質提升


閱讀全文...

.Net Connection Pooling 問題 - (.Net 1.1 一般網路錯誤/ .Net 2.0 在傳送要求至伺服器時發生傳輸層級的錯誤。 (provider: TCP 提供者, error: 0 - 遠端主機已強制關閉一個現存的連線。)


偉哉 微軟~

透過 .Net default Connection Pooling 機制存取 DB

會有問題,其實不是一天兩天的事了

網路上的論壇 也有提到 這樣的問題 已經三、四年了 但是 一點兒也沒有解決的辦法 亦無一通用的說明及解決方法

在 .Net framework 中,使用connection pooling機制存取DB,依不同 framework 版本 又分下列兩種一般的錯誤訊息:

.Net Framework 1.1 -> 一般網路錯誤
.Net Framework 2.0 -> 在傳送要求至伺服器時發生傳輸層級的錯誤。 (provider: TCP 提供者, error: 0 - 遠端主機已強制關閉一個現存的連線。)
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) ....

其實,軟體本身就是 unreliable 的東西

若是一味的依錯誤訊息 斷定是硬體、網路的問題 這樣或許太偏執

以上述的訊息來看,一樣的senario 不一樣的 .net framework 居然丟出這樣不同的訊息
就是 .net framework 的一個問題


再者,明明不是網路問題 卻丟出網路錯誤的message 更是該打屁股

以下聽我道來:

* connection pooling 的美意是因為connection的建立cost非常的高,若能reuse 已建立好的connection,則可省下許多的運算資源

* .NET default 就會 by application domain, connection string 有自動的connection pooling機制
只要是在同一 Application Domain下、擁有相同connection string的 connection,
都會share同一connection pool (default: MIN Pool Size=0; MAX Pool Size=100)

* .Net connection pooling 並沒有檢查 connection pool 中 既有connections有效性的機制
透過以下lab實驗,可以證明這件事
a. 透過 .net client 程式透過connection pooling機制query db,可以讓 pool 中保持一定的connection
b. 在 SQL Server 端,將對應的connection 殺掉(透過 kill)
c. 再透過 .net client 程式透過connection pooling機制query db,偉大的.net 就會依framework版本,吐出上述兩種不同的訊息(都跟網路錯誤有關)

* 由以上小實驗可知,.net framework 的訊息 容易讓developer 誤解,以為 是網路的不穩定,但 實際的原因則是,connection pool 裡的connection 本來就不保證一定是可用、沒問題的

* .Net Framework 並不保證 也不會maintain connection pool 內的connection的正確性

其實,我也是深受其害 才會來做這些驗證的實驗的...

以下是當你遇到這個問題時,建議的解決方法:

1. handle sqlclient 的 exception 並適時加入 retry 或其它exception handling的作業
正解
software is unreliable, 既然有 exception 發生的可能性,為何不 catch 它,而要任由它throw出來
殊不知,thrown exception 的 cost 比 handle exception 的 cost 大上十倍以上
且,加上 exception handling code, 在不發生 exception 的狀態下,根本對程式的performance沒影響
百利而不一害~ 幻想偉大的programmer 們~ 為何不去 handle 它呢 ?

2. 避開它, 不使用connection pooling 機制
停用 connection pooling 的機制(在 connection string 上,加上Pooling=false)
既然不用該機制,當然也就不會有該問題發生啦 :)
不過,這是消極的做法,必竟 不做connection pooling 是會降低一些performance的,
尤其是您的系統是忙碌的線上系統時

3. 調整Connectoin String中 Connection Lifetime 參數 (default 是 0, 即 不主動回收)
透過connection lifetime,把一段時間未使用的connection 進行 release 可以降低 long connectoin可能造成的問題,亦可在 traffic burst(尖峰時段) 時段有pooling, reuse-connection的效果
BTW, 這個值 還要再試驗; 另外,exception 還是要handle 的啦~

Connection Lifetime

0

When a connection is returned to the pool, its creation time is compared with the current time, and the connection is destroyed if that time span (in seconds) exceeds the value specified by Connection Lifetime. This is useful in clustered configurations to force load balancing between a running server and a server just brought online.

A value of zero (0) causes pooled connections to have the maximum connection timeout.


下面是我做的另一個實驗,這更加深了我對 .Net connection pooling 機制的懷疑:

測試原理: 透過簡單的 test driver, 分別以 使用connection pooling、不使用connection pooling的狀況下,在一定的間隔,對Database做簡單的操作 (如: select N'ok')

測試設備: 3台
測試時間: 2天
測試架構: test driver -> web farm(3台設備) -> switch -> clustered DB Server
測試結果: 不用connection pooling 錯誤率 0%
使用connection pooling 錯誤率依測試間隔 往上飆高


以上~ 供各位參考

強調: 這只是在我的實驗環境裡的結果,或許有其它設定值的因素 導致這樣的結果


閱讀全文...

Software Testing - 談軟體測試


在軟體發展生命週期中,測試是相當重要的一環

整個測試的目的 是要做到驗證(verification)及確認(validation)的作業

以在下列兩個主要的構面,確認軟體成品的品質
驗證(verification): do the thing right - 把事情做好, 即 驗證軟體是否依技術規格開發
確認(validation): do the right thing - 做對的事情,即 驗證軟體是否滿足開發的初衷(intend)

就軟體價值而言,通過驗證以證明軟體的技術品質是最基本的事
但,能讓軟體發恢價值 則是透過確認的動作 ...

確認的作業,一般發生在需求發展(requirement development)及 使用者驗收階段(User Acceptance Testing, UAT),在需求發展階段 是要透過各種不同的方法 將軟體的需求誘導出來,並儘可能在該階段 就將需求確認好,因為 在整個軟體生命週期中 需求發展 - 需求分析 - 系統分析 - 開發 - 系統測試 - 驗收 - 上線
越是在後期發現問題、修改需求 所需的effort/cost愈高
所以,這個階段 其實 是最最最重要的

在使用者驗收階段中,則是透過檢視、使用者操作測試的方法 來確認最終產品符合客戶需求

驗證的作業,則強調 軟體生命週期中的各項產出(artifact) 互相間的一致性
即 需求-設計 的一致性,設計-開發 的一致性.. 等
透過層層的驗證檢查,以確保 所有最初的需求都有被完善的被滿足

不論是 驗證(verification)、確認(validation),我們都會在其中的部分活動面臨到軟體成品的測試

特別在 RUP(Rational Unified Process), XP(eXtreme Programming)等agile development process的概念風行之後

所倡導的 Continuous Integration觀念、Test Spec as requirement 觀念
都在在的強調測試的重要性!!

唯有讓程式(自動化的測試工具/腳本)來驗證程式,才是通往agile development & continuous integration的唯一途徑

否則,在快速且反覆的整合過程當中,若缺乏自動、快速的測式方法,而由人力進行測試的話,將會花費許多時間人力、難以掌握測試的品質及一致性、亦會扼殺了人類的價值 (讓人一直做重複的事情跟操作)

一般軟體的測試工具 不勝枚舉,個人知道的有下列的工具
做Unit Test的有: JUnit, NUnit, ...等 *Unit 系列
做Functional Test的: QTP, WebDriver, Selenium Core/IDE/RC, ... 等
做Performance Test的: Rational Robots, Load Runner, ACT, Selenium Grid, ... 等

其中,WebDriver, Selenium 是專門進行 Web 測試的工具
都是伴隨著 Web 2.0 的成長,所發展出來的 opensource 免錢軟體

因為,這兩個產品在 google 內部也被大量的使用到

所以,後續 將會有針對這些tools的一些的介紹


閱讀全文...

2009-04-13

CodeMirror 介紹 - 在Web上呈現程式語言內容



一般的programmer總會想在 web 上面去分享自已的一些sample code
但是,html 對於一般程式語言用的換行、tab符號 都視為空白
且,Browser也缺乏對 programmer language syntax high-lighting/coloring, code indentation(縮行)..等功能
所以,我們單純的把程式碼做為 html 的文字內容時,常常得到的是一串很醜、沒斷行的字串
就算加了 pre 這個 html tag, 能保留斷行、空白 但也無法擁有 syntax hilight 的功能
一般,可能用貼圖的方式 or 檔案下載的方式 來提供這些程式碼的內容
或是自訂css來做呈現~
但這些方法都比較間接 也比較麻煩一點...

Code Mirror 就是為了幫助解決這個問題所生的一套 javascript library
基本上,它提供了一個 code editor 的介面
提供了數種程式語言的呈現及編輯介面 (只要依它定的規則去寫parser,就可以再延伸其它語言的應用),使用者可以很清義的透過 javascript 來使用、設定呈現的效果
目前支援的語言有 HTML ,XML, JavaScript, Python, CSS, SPARQL, PHP
透過 CodeMirror config值的設定,可以定義該呈現區塊處理的程式語言為何(parser)、呈現方式為何(css file)、要不要有行號、要不要自動換行(wrapping)...等功能
可說是非常的方便~

連 Google 的 API playground, Google Earth KML Sampler 都是透過code mirror來打造出一個可線上編輯、執行JavaScript的環境

下面是我試用的結果:


閱讀全文...

Yahoo Pipes: Web資料擷取處理引擎介紹


Yahoo Pipes 可以依你定義的資料流處理方式,幫你進行 web 資料(rss, atom, csv, ..)的擷取、處理、輸出(format: rss, json, ...)

好處是 透過 pipies 作為資料處理引擎,不用將資料處理邏輯放在自家的 server 上 而是 host 在 yahoo

透過拖拉的方式 將資料處理邏輯定義好(如, 取得、匯集、過濾、排序...等) 也可省掉很多 coding的時間及人力

之前寫的 sample 而言

就是透過 yahoo pipes 裡user定義好的資料處理流程,將 RSS / ATOM feed 轉成 JSON format

以達到 不用 server side code (proxy) 來達到 client 端跨domain 的資料擷取
(註: 因為 Same Origin Policy 的關係,在AJAX的實作中,client side script 不能透過XMLHttpRequest 存取不同domain的web resources,此時 proxy 是一種walkaround來繞過這種問題的解決方式)

這樣,甚至根本就不用 server side 的程式,就可做很多 mashup 的應用 :Q

供各位參考~ 還滿有趣的


閱讀全文...

2009-04-06

Google April Fool's joke: 3D Chrome & Brain Search & ...


Google 在愚人節大開使用者玩笑

讓我笑到不行,真是很有趣的一家公司 :)

發現了幾個Google 的惡作劇,這次的惡作劇主題是: CADIE: 分散式人工智慧體

藉這這個強大的新技術,發展出了一些有趣的新APP


以下,是 Google 惡搞的成果 :

1. 3D Chrome


http://www.google.com/intl/en/landing/chrome/cadie/
Chrome 推出 3D 功能,只要下載並製做好3D立體眼鏡
按下Chrome的3D功能,即可用3D的效果來瀏覽網頁~
別擔心~ Google強大的工程團隊,會幫您將web content處理過 讓他們能配合3D Browsing來提供客制的3D Content呢!!

2. Brain Search
http://www.google.com/mobile/default/brainsearch.html

透過手機的天線來接收腦波的訊號,將人腦想到的Search Term直接輸入手機進行Search :Q

好 Kuso ~~~



3. GMail autopilot
http://mail.google.com/mail/help/autopilot/index.html
透過Gmail內您寄出的信件的溝通風格分析~
自動為您回信~

4. Google Code CADIE
http://code.google.com/intl/zh-TW/creative/cadie/
透過自然語言的描述,CADIE可以幫你用C++/PHP/Python/Java/...等語言產出您要的程式碼哦 :)

5. 在GMap 上 CADIE的地標
http://maps.google.com/maps/mpl?f=q&ie=UTF8&moduleurl=http://www.google.com/intl/en/landing/cadie/doc/panda-mapplet.xml&utm_campaign=en&utm_medium=mapshpp&utm_source=en-mapshpp-na-us-gns-mp



6. 在Google Earth 裡 也有
http://earth.google.com/cadie.html


---
以上~ 全為 Google 出品 :Q


閱讀全文...

2009-03-20

Emoji - 繪文字


Emoji (moji -> 文字)簡單來講 就是類似表情符號的東西(Emoticon --> 沒看錯.. 就是 Emotion + Icon)
因為在日本的通訊業界(Docomo, KDDI, Softbank...) 使用的很廣泛
大概也是因為日本人很愛傳簡訊 搞了一堆有的沒的小圖很可愛...
因為 手機跟手機間互傳這些繪文字時 不是傳圖,而是傳編碼
而各家廠商用的編碼都是自訂的 所以 交換上會比較麻煩 需要轉碼
因為這些東西 也日漸普及 不管是不是日系的手機 也都有類似的功能,甚至在Web上也有類似的應用

所以,現在有一個 project 要提議把這些圖文字加入標準的 Unicode規範裡了:




閱讀全文...

2009-03-19

JavaScript 之哀愁 & 學習資源


Douglas Crockford 在 Google Tech Talk 的一個演講: JavaScript: The Good Parts

裡面提到了 JavaScript的美麗與哀愁

多數人 認為 這是一個很簡單、不重要的語言,所以 都是需要用到時 去抄、去改、去湊、去查
然後~ 拼出一個好像可以work的東西
JavaScript 語法長的很像 C, Java 不過 實質的內容 則是差很多
所以囉~ 寫出來的東西 錯誤連連、不好Debug 就怪到這語言設計不好的頭上啦~
當然 這語言設計是有一些缺失 不過 也有很多值得讚美的地方~
JavaScript: The Good Parts這個talk 裡就為JavaScript做了一些平反

演講裡面~ 有提到 其實 JavaScript是當今世上最重要的語言
不無道理~ 現在 有哪台電腦上沒有browser、沒有JavaScript Interpreter ?
哪個網站沒用 JavaScript? 不搞Web2.0 ?

So, 既然這麼重要 當然應該要好好的熟悉它

因為本身對這語言 就像 Douglas Crockford 說的一樣... 還真的沒有好好的去研究他過
所以 也在網路上Search一番,有些資源 看來不錯~ 也在這兒做個整理囉:



閱讀全文...

Chrome shortcut


可參考官方說明:

http://www.google.com/support/chrome/bin/answer.py?hl=en&answer=95743


閱讀全文...

RSS Extending (RSS 擴充)


RSS 2.0 是可擴充且相容於 RSS 1.0 的
擴充的方法很簡單,只要不是 RSS 2.0 規範的標準 tag (XML Element)
都要用namespace來限定它(qulified) 這樣就可以進行RSS的擴充了~
這類在其它 namespace定義的RSS擴充用tag,在RSS世界裡 叫叫 RSS Module
因為 RSS 2.0定義的tag,都是 unqualified 的 (在XML Schema內: elementFormDefault="unqualified"),且 RSS2.0 的 tag name 為 RSS1.0 的superset
所以 RSS2.0 的reader 也可以吃 RSS1.0的feed(相容)

以下是 OpenSearch RSS2.0 Module的一個擴充實例:
--
備註一下: http://www.rssboard.org/rss-specification

Extending RSS *

RSS originated in 1999, and has strived to be a simple, easy to understand format, with relatively modest goals. After it became a popular format, developers wanted to extend it using modules defined in namespaces, asspecified by the W3C.

RSS 2.0 adds that capability, following a simple rule. A RSS feed may contain elements and attributes not described on this page, only if those elements and attributes are defined in a namespace.

The elements defined in this document are not themselves members of a namespace, so that RSS 2.0 can remain compatible with previous versions in the following sense -- a version 0.91 or 0.92 file is also a valid 2.0 file. If the elements of RSS 2.0 were in a namespace, this constraint would break, a version 0.9x file would not be a valid 2.0


閱讀全文...

2009-03-18

Google Chrome Next Beta Release...


Google Chrome Next Beta 可以下載來看看~ 目前最新Beta版本為 2.0.169.1

速度比目前release的stable版本快了 30~50%

也多加了 auto-scroll, form auto-filled, full page zoom, .. 等功能

比較奇怪的是,tab drag 的功能 多了一項,把tab拉到chrome視窗側邊時 可以有視窗並排的效果
(呃.. 這功能要幹嘛?... 好吧... 對照兩個網頁時 有一點小用吧)


閱讀全文...

2009-03-17

PostgreSQL 8.3 版 與舊版之相容性問題排除方法


最近剛好有機會接觸PostgreSQL

一部分的工作是將存在舊版PostgreSQL的資料 porting 至新版

在 porting 的過程當中,發現 PostgreSQL 8.3版針對 implicit type conversion 做了更嚴

所以~ 在舊版 PostgreSQL上面存在的一些default的自動轉型函式(implicit type conversion function)都被移除掉了

當然,過去寫的程式若是比較髒 (例如: 拿 integer 跟 char varing比較、Join)的SQL Statement在新版就會行不通~

比較用功的人~ 當然要藉機好好的review一下 schema的設計是符合理,schema, SQL Statement語句是否要調整~

但,如果影響範圍很大的話,倒是可以自已將新版拿掉的 自動轉型函式再補回去~
這樣 就不用改程式囉 :Q

以下是我在網路上找到,補在新版PostgreSQL的一些function,補上去後 原本的app就可順利執行了:

CREATE FUNCTION pg_catalog.text(integer) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int4out($1));';
CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT;
COMMENT ON FUNCTION pg_catalog.text(integer) IS 'convert integer to text';

CREATE FUNCTION pg_catalog.text(bigint) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int8out($1));';
CREATE CAST (bigint AS text) WITH FUNCTION pg_catalog.text(bigint) AS IMPLICIT;
COMMENT ON FUNCTION pg_catalog.text(bigint) IS 'convert bigint to text';


閱讀全文...

Tomcat Post / Get 中文編碼處理方法 (中文亂碼問題)


最近在把原本佈署在 Resin 的 Java Web Application移植到 Tomcat 時,有許多原本正常的中文get / post 功能,都變的異常,只要是透過 get / post 得到的資料,就會變亂碼

剛好也驗證了 Resin 在Character Encoding的部分做的較好
而看看網路上大家的問題,也可以知道 Tomcat 在編碼處理的部分 真是讓很多人頭痛

主要的原因是,TOMCAT 預設都是用 ISO-8859-1 的編碼方式來傳遞資訊

這個問題,可以解決的方式整理如下:

1. JSP 頁面的編碼宣告需與實際儲存檔案時用的編碼一致

這是個很好玩的問題~ 有些人 在頁面宣告用 big5 or UTF-8 or... 字集
但是,檔案實際儲存的方式與該編碼不同,則 頁面當然會出現亂碼的問題

2. 自行轉碼
form method=POST or GET 時 因為Tomcat預設編碼是ISO-8859-1的關係
直接用 <%=request.getParameter("firstname")%> 取值,中文字會變亂碼
(你傳的明明是UTF-8, 但是讀取時 確用 ISO-8859-1來解譯.. 當然有問題囉)
要使用 <%=new String(request.getParameter("firstname").getBytes( "ISO-8859-1"), "UTF-8")%>這種方式 來轉換編碼才會正常 (假設,頁面用的編碼為UTF-8時)

3. 透過設定 server.xml URIEncoding的方式 來處理 GET 亂碼問題
在 tomcat 的設定檔內 ./conf/server.xml 修改下列設定的話,則透過GET的方式傳遞參數
的話,Tomcat會用你指定的編碼方式來對待用get方法傳遞的參數,而不是使用預設的ISO-8859-1 (get 的方式是透過 url parameter傳遞參數)
但是,因為只處理 URIEncoding, 所以若使用 Post 傳遞,還是會有問題


URIEncoding: This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.

P.S. 若使用 GET Method, 且設定了URIEncoding 的話就不用再做上述二的自行轉碼動作,如果多加該處理,一樣會有亂碼的問題

4. 使用 request.setCharacterEncoding 來處理 GET / POST 的亂碼問題
在處理的頁面,加上下列的處理即可,明確的告訴Tomcat request的編碼為何,不要一廂情願的使用ISO-8859-1來解讀~

<%request.setCharacterEncoding("UTF-8");%>

javax.servlet.servletRequest.setCharacterEncoding(string env)
Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader(). Otherwise, it has no effect.

5. 使用 filter 來處理 GET / POST 的亂碼問題
這個方法是最方便的,只要在 web.xml 裡面 透過 filter 的設定,讓每個網頁都能
透過 filter 的處理一體適用所有編碼問題的解決
方法如下:

a. 目前 Tomcat 提供的範例裡面,就有現成的 Encoding Filter, 位置如下:
.\Tomcat 6.0\webapps\examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class

b. 所以,只要把該 class 檔,copy 到你的 web application 的
.\WEB-INF\classes\filter 下,再搭配 web.xml 的filter 設定,
就可以讓所有符合 url pattern 的網頁,都能自動apply所想要的編碼設定(透過 encoding這個 parameter來設定),是不是很方便呢 ?
(這個功能 就像是自動把上述第四點的 setCharacterEncoding 語句 自動apply到各頁面囉)



------------
以上~ 就從 Resin Porting 到 Tomcat 的經驗,當然是使用 filter 的方式 一次解決~ 不然的話 就得每個網頁每個網頁去改囉~

延伸資料:
FAQ/CharacterEncoding
http://jim.blogsome.com/2005/05/27/jsp-chinese-character-solution/
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=752


閱讀全文...

Pi Day & 白色情人節


Pi Day Countdown
每年的 3月14號,是商人的白色情人節,是很多數學狂熱宅男的Pi Day~
π(Pi) 這個數字 代表一圓直徑與圓周的比例~ 大約是
3.1415926535897932384626433832795028841971693993751058209......
到目前為止,大概已經被算出 一兆位了~ (天啊)
Pi 的符號π在1706年由 William Jones 首先使用
但在 1737年由Euler所引用 而廣為人知

有一個Pi Day的網站專門用來提供一堆跟Pi有關的資訊 這數字還真偉大 ><~ 想鍛鍊記憶力的人~ 這邊有100萬位數的Pi可以參考背誦~
Pi記憶的世界記錄目前是由一位中國人 Lu, Chao 保持,他在2005年時創下記憶67,890位數的世界紀錄,總共花了整整二十四個小時又四分鐘來將這些數字完整無誤的背誦出來
也有人把 Pi的每個位數 mapping 到鋼琴鍵盤,透過不同的mapping方式 弦律當然不一樣~這個人的mapping方法,彈奏出來的曲子 還滿好聽的呢:Pi Song


哈~ 只能說 世界無奇不有~ 真是屌囉 :)


閱讀全文...

2009-03-09

Seagate 7200.11 問題硬碟修復方法說明 (適用於下列狀況 BIOS抓到硬碟,但顯示容量為LBA:0 / 0M or BIOS抓不到硬碟)


前言: 98/2/28 在做file copy時,突然電腦就當掉、畫面不動,想說... windows 本來就很不穩,重開一下就好了。結果...重開時...在BIOS階段的時間停的非常久,最後,出現「主硬碟磁區錯誤」的訊息,之後試了非常多的方法、搜尋了非常多網路的訊息,終於確認是因為Seagate H.D. 軔體(firmware)瑕疵所造成,雖說Seagate承諾firmware所造成的問題,並不會造成資料遺失,也會協助受影響的用戶回復資料。但是,依我找到的訊息以及本身的經驗,並不想將硬碟報修,原因如下:


a. 我的硬碟遇到的問題為 LBA:0 Size: 0 M(BIOS抓的到硬碟,但容量為0)的問題,此問題在國外專業的硬碟論壇裡,在97年年中左右,早就證實是因為firmware異常造成,但卻不在此次Seagate官方公佈的問題徵狀內(官方公佈的訊息為 H.D. Bricked 的現象,即 BIOS抓不到硬碟)

b. 拿硬碟序號到Seagate官方網站(問題硬碟檢測網站)確認是否為問題硬碟,結果顯示 Drive is not affected. No action required. --> 就是,我的硬碟不是問題硬碟,因為不是問題硬碟,所以 Seagate當然不會幫你恢復數據。

c. 送台灣代理商 : 擔心代理商會不會為了方便起見,用換良品的方式處理,不協助轉送Seagate or 自行將資料恢復 ?

d. 送國外Seagate: 也怕被用換良品的方式處理,再加上我硬碟的序號不在問題硬碟序號內,所以就更加沒把握

總之,真的非常的灰心 也很擔心資料回不來
不過,在做了很多資料搜集及嘗試後,終於找到了明燈:
所有的方法,都是由這系列文章所得來的: The Solution for Seagate 7200.11 HDDs

努力了一個禮拜,到處尋找修理用的Serial-to-TTL轉接線後(總用試了三種線,其中燒掉了一條),終於成功了。因為真的試的非常的辛苦,所以分享我的經驗,讓也有相同狀況的人能參考利用。我相信,這個Solution應該是最經濟的解決方法(二百塊以內的材料費),所以 有興趣的人,就往下看吧。當然~ 只是提供我的經驗供參考~ 不保證可修復 亦不保證不會損及您的硬碟。

---------------------------------------------------------------------
Seagate 7200.11 問題硬碟修復方法說明 (適用於下列狀況 BIOS抓到硬碟,但顯示容量為LBA:0 / 0M or BIOS抓不到硬碟)
---------------------------------------------------------------------

0. 問題說明
Seagate 7200.11 (梭魚11代)系列在2008.12月之前出廠的部分硬碟,有firmware上的問題
會造成 BIOS抓不到硬碟(Driver Bricked)。另外,在官方聲明的範圍外,也有許多使用者,遇到BIOS抓的到硬碟,但是顯示容量為0Mega因而無法使用的問題。以下會就 LBA:0 的修複方式進行說明,並附上另一種狀況的修復方式參考資料(方式大同小異,只是對硬碟下的命令不同)。若您的硬碟還可使用,但卻為被影響的型號,請儘速至官方網站下載新版的firmware並更新,以預防上述現象發生。

Seagate 官方說明:
已經確定了一種影響少數 Seagate Barracuda 7200.11 硬碟機型號的韌體問題,此問題可能導致資料在電源關閉/開啟作業後無法存取。受影響的產品有 Barracuda 7200.11、Barracuda ES.2 SATA 和 DiamondMax 22。

下圖是我的故障硬碟


用其它硬碟正常開機,以Seagate SeaTools 短檢測不過、長檢測不過、S.M.A.R.T. 不過
硬碟資訊秀出如下圖,MAX LBA 只剩 1


用 MHDD 在DOS模式觀看該硬碟資訊,得到 LBA:0 / Size=0MB 的訊息



1. 準備材料
a. Nokia CA-42 傳輸線一條 (nokia特約店面 or 網拍都找的到 約100~200元,其它一般店面 很難找到,我問了十幾家通訊行 >
b. 音源線一條 (or 杜邦線2條)
c. 美工刀、剪刀、電線膠帶(台語: 電火布)
d. 一台可開機、有 usb 插孔、有SATA電源的電腦
e. 無比的勇氣及耐心 (這是對我而言啦~ 我試了一個禮拜 用了三種線,其中一條還燒掉了)

2. 原理說明
想辦法讓電腦的Serial Port(RS232介面)連接到硬碟的維修針腳(TTL介面)
並使用終端機軟體透過此線路連接對硬碟下低階的指令
因為 RS232 與 TTL 對於 0 / 1 對應的電壓認定不同,故 上需有一轉接器來幫忙做這件事(如, MAX232晶片)
網路上的做法不同點,就在於這段線路的連結解決方案,整理一下,約有幾種
a. 自製: 買 COM接頭、電路版、電容、MAX232 自已做這個轉換的介面
b. 購買: 買 RS232-to-TTL 的轉接器 or USB-to-TTL 的轉接器
c. 購買: 買 行動電話的傳輸線,部分行動電話的data cable內含 USB-to-TTL or COM-to-TTL 的轉換模組
基本上,選項 c 是最便宜、最簡單的方法

下面是我買到的 CA-42 (第一條在西門町西子林買的 200塊!! 第二條是跟網拍的賣家買的,自取 100塊)


3. 測試CA-42是否正常
買回 CA-42後,把 USB頭插入電腦,應該會出現「新增裝置」的提示,此時把CA-42的Driver放入,應該就可以安裝完成,到裝置管理員裡面去check,有沒有一個虛擬的COM port跑出來,把這個COM port的號碼記下來


4. 製做線路 - CA-42部分
將 CA-42的線材剪成兩段,靠手機接頭那一段 留一點就行了,因為 之後也用不到。
另外一段(USB接頭的),把電纜用刀片劃開後,可以把裡面的電線拉出來。
正常的CA-42裡面會有三條線,但也有部分的彷仿造品內有六條線的。
線路的顏色依製造工廠而有不同,雖然我們只會用到 CA-42 的 RX/TX 兩條線
不過,因為不知到哪條是 RX 哪條是 TX, 所以 還是把裡面的小電線外皮給切掉,約露出1公分即可(或者,你也可以把 USB 頭給分解,看看裡面電路板不同的腳位對應到的電線各是哪些條)

5. 測試線路 - CA-42部分
如何找到 RX/TX ?
因為我手邊沒有設備,對於電子電機的東西也不熟,所以我是採試誤法(trial-and-error)
把CA-42的小電線 每次選兩條相接(扭在一起即可)、將USB接頭插入電腦,並使用如 超級終端機(Hyper Terminal) 或 Putty 之類的軟體進行 loop back 測試。若是RX/TX 有接在一起,那麼 你在鍵盤上面敲的按鍵,應該馬上會從螢幕上跑出來(即,echo 的效果)

終端機之參數設定如下:


Loop-back 測試方法如下圖 (其實,很簡單的把兩條電線扭在一起,也可以)


6. 製做線路 - CA-42 與硬碟接腳連接用線
因為硬碟接腳為公頭,所以最適合找母頭來接
因為手邊有不用的音源線,音源線的兩端都是母頭,所以 就拿來分解利用
注意,接硬碟的那端 最好用電線膠帶纏起來,以免與其它線路互相接觸
分解後的音源線長這樣:


7. 完成連結硬碟用線路
把 CA-42 與 音源線串在一起,一樣 在接頭部分 請用電線膠帶纏起來
為了保險起見,接起來後 再進行一次 loop back 測試 確認線路無誤



8. 連結硬碟
a. 接上硬碟的SATA Power (註: 務必要使用 SATA Power, 不要透過轉接頭(即,4pin的Molex Power 接頭轉SATA接頭),否則可能會有問題、設備也可能燒掉。註: 我自已有燒掉一條CA-42)

b. 將 RX / TX 兩條線分別接上硬碟的TX / RX 接腳, 7200.11 硬碟,硬碟上的接腳示意如下
[? Ground TX RX] [SATA排線][SATA電源]

或可看這裡
PS. 上步驟找到 RX/TX 兩條線後,我們還是不知道哪條是 RX 哪條是 TX,
所以一樣用試誤法 最多兩次應該就可以成功了
腳位接錯設備不會被燒掉,可放心
c. 啟動PC電源(即,為SATA Power供電),將USB接頭接到要用來維修用的PC (我是用同一台啦)

相關設備、線路的接法如下:



9. 對硬碟下指令 (針對 LBA:0 / Size: 0M 的問題)
上述步驟完成後,開啟終端機軟體、並連線 (連線的相關設定 就如同在做 loop back 測試的設定一樣)

a. 先按 Ctrl+z 如果 RX/TX 有接對的話,那麼 終端機軟體應該會秀出下列命令提示字元
F3 T>
PS1. 如果接錯的話,那麼 monitor上不會有任何反應
PS2. 如果不依建議使用SATA Power而使用Molex Power的話,終端機畫面會一直跑出垃圾字元,且設備可能會被燒掉。
b. 在 F3 T> 下,輸入下列字元並按Enter
m0,2,2,0,0,0,0,22
c. 接著,就是有耐心的等待(雖然畫面上寫 30秒,但我實際等了約7~8分鐘),若等到下列畫面出現,恭喜!! 您成功了... 可以關閉電源、把相關線路拔除後將硬碟接上並測試,以我的經驗,我的硬碟資料完全沒有遺失。



10. 其它 --- 針對 HARD DISK Bricked 的問題解法 (即, BIOS抓不到硬碟)
此段我沒有實作過,不過 一樣可以透過上述做出來的線路,並參考The Solution for Seagate 7200.11 HDDs (final and revised version)這篇文章的步驟及指令進行

--------------------------
參考資料:
1. 所有的方法、命令,都是由The Solution for Seagate 7200.11 HDDs (final and revised version)這個系列的討論而來,上面的方法主要是用 RS232-to-TTL Converter來連結電腦與硬碟
2. 改裝 Nokia CA-42 拿來控制設備的文章來源: Use a Nokia Serial Cable on an ARM9 Linkstation


閱讀全文...

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


閱讀全文...