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


閱讀全文...