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
2009-05-08
Google: The 2008 Founders' Letter
Serge Brin 在今年Google年報(annual report)內給投資者的一封信
閱讀全文...
.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 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 本來就不保證一定是可用、沒問題的
其實,我也是深受其害 才會來做這些驗證的實驗的...
以下是當你遇到這個問題時,建議的解決方法:
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.
閱讀全文...
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上呈現程式語言內容
就算加了 pre 這個 html tag, 能保留斷行、空白 但也無法擁有 syntax hilight 的功能
下面是我試用的結果:
閱讀全文...
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 - 繪文字
閱讀全文...
2009-03-19
JavaScript 之哀愁 & 學習資源
Douglas Crockford 在 Google Tech Talk 的一個演講: JavaScript: The Good Parts
- JavaScript: The Definitive Guide,by David Flanagan: 高手唯一推薦可讀的JavaScript書籍
- The Java Script Reference Series: 這個網站有對JavaScript的教學及說明 我覺的寫的很棒
- Mozilla Developer Center: 裡面有 JavaScript Reference & Guide
- JSLint: 一個JavaScript Code品質的評估工具
- Douglas Crockford也是JSON的發明人
- JavaScript: The World's Most Misunderstood Programming Language, by Douglas Crockford
閱讀全文...
RSS Extending (RSS 擴充)

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...
閱讀全文...
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 & 白色情人節
每年的 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. 先按 Ctrl+z 如果 RX/TX 有接對的話,那麼 終端機軟體應該會秀出下列命令提示字元
--------------------------
閱讀全文...
2009-02-28
Safari 4 Beta - World's fastest browser
Web Browser 的大戰 真的慢慢的展開了~
閱讀全文...
