這個問題一直是很大的問題,但是以前都是裝做不知道,一律用 ASCII 來混過去。
反正以前 VB 或 VC 在中文的環境下,也是用 ASCII 當做預設值,所以只要是打英文就沒事了。
現在開發環境換成 .Net 之後,預設值是 unicode,
也就是在程式中,你看到的就是 unicode 編碼的 string,其實正常也不會有問題。
但是,要跟 com port 傳資料,就會出問題了,怎辦? 好,.Net 也想到了解決方法,
就是用 System.Text.Encoding.ASCII.GetBytes, Encoding.ASCII.GetString 這兩個方法來處理。 當你要把程式中的字串,變成 ASCII 的編碼送出去,
就先用 Encoding.ASCII.GetBytes 把字串變成 byte[],然後把轉好的 byte[] 直接送出去。 當你要把接收到的 byte[],變成 Unicode 的編碼的字串,
就用 Encoding.ASCII.GetString 變成字串。 同理,其他的編碼就照樣造句囉… 當你要把文字中的字串,變成 Unicode 的編碼送出去,
就先用 System.Text.Encoding.Unicode.GetBytes 把字串變成 byte[],然後把轉好的 byte[] 直接送出去。 當你要把接收到的 byte[],變成 Unicode 的編碼的字串,
就用 Encoding.Unicode.GetString 變成字串。 想要知道有什麼編碼可以用,就用 Encoding.GetEncodings 列舉出來看看。 完畢
betaparticle 發表在 痞客邦 留言(0) 人氣(1,312)
憂心學Java不知能做什麼的人,也許不會想到這一天。 因為昇陽把 Java 給 Open Source 之後,又把自己賣給甲骨文。
Java 面臨 M$ 的 C# 的直接衝擊又已沒有靠山撐腰。
Java 擅長的網路領域又有 Dynamic Language 大搶飯碗。
從歷史已久的 Perl, PHP 到年輕一點的 Python, Ruby,
甚至連 JavaScript, VBScript 等網頁專用 Script 也趁著 Web2.0 活起來,
搭配新的 Script 引擎,在這兩、三年突襲網路使用習慣,
Web2.0 如此成功,Java 的技術在哪?
Java Applet 已經很難看見了…。 目前能看見 Java 在網路上的應用,似乎在網路下單系統還看得見。
也許金融所需要的安全,Java 做到了。
因此,Project NACA 更進一步,想把以往銀行金融所使用的 COBOL 轉成 Java。
這也許就是趨勢,想進入金融業的程式人,Java 是一門必修的語言。
http://freesf.tw/modules/news/article.php?storyid=3727betaparticle 發表在 痞客邦 留言(0) 人氣(38)
關於程式使用非英文系的部份,通常都很難搞。
難搞是在於,沒有想通,怎麼搞都會錯。
我原本以為,我上次參考的文件就解決了所有的事。
結果當然不是。如果是,我也不會寫這篇了。 現在,我搞懂了兩個部份。
第一個是程式使用中文的部份。
仔細地說,是,其他地方產生的中文字串被程式使用的部份。
例如從檔案讀字串,或從使用者輸入的地方讀字串。
這個部份會出錯的地方常見於「輸出亂碼至畫面」、「輸出亂碼到檔案」。
在這種時間,最常使用方法是,「先轉成 unicode」,
可以是utf16,也可以是utf8,只要轉得過去,就可以轉成想要的。
一個經典句如下:
unicode(i.decode('cp950')).encode('cp950')
這就是強迫從 cp950 轉成 unicode,再轉回 cp950。
這樣寫就是當你知道來源編碼及目的編碼時,保證一定不會出問題的寫法。
當然也可以不要這麼費工,例一:知道來源編碼與系統編碼一樣,可以省 decode 那段。
例二:知道目的編碼與系統編碼一樣,可以省 encode 那段。
例三:…… 第二個是程式碼內的問題。
我們會在程式碼的地方,宣告某變數是某個中文字串。
在某些語言不會有問題。
但在 python,唯一解決方法,就是在程式碼開頭宣告
# -*- coding: cp950 -*-
我試了很久在程式碼轉來轉去都轉不對。
目前只有這個方法可以解決。
如果有人有其他方法,可以告訴我。 其實以前在搞 linux 的時候,中文的問題還有更多。
像是 NTFS, FAT32 的檔名編碼固定是 unicode,內容又歸內容的編碼。
ext2, ext3 檔名編碼,內容編碼都可以隨便設定,
檔名轉碼要靠 mount 時指定參數來搞定;內容轉碼可以靠 iconv 來處理。
這些之外,還有 kernel 參數要先搞好。
這幾個就搞死一堆人,還曾引發論戰。現在想想還滿搞笑的。 從這個問題,就出現一些未來會面對到的問題。
目前我們用的是 big5 編碼,MS 在自家系統有加強了一點點,自己叫做 cp950。
以後,編碼總是會慢慢地變動,有些文件,有一天會再也看不出內容是什麼。
也許是杞人憂天啦,不過,不要以為現在的文件,十年後還打得開喔。
要趁還有轉換程式的時候,就轉存成流行的格式。
越扯越遠了。
betaparticle 發表在 痞客邦 留言(0) 人氣(1,335)
MQ 是什麼?能吃嗎?
這部份延續我上次有關 IPC 的主題。因為 MQ 也是屬於 IPC 的一種。
這次研究的是 IBM 的 MQ。
講了這麼多的 MQ,倒底什麼是 MQ,其實就是 Message Queue。有關學理的部份目前還沒找到在何處。現在先放下不說。
以下只是記一下小筆記。
有關 IBM MQ 的幾個小tip,值得記下來的(.Net only):
test env: MQ5.3 CSD13
1 client-server
1.1 可以用內附的程式試一下 server 端的設定是否完整
1.2 如果 client's OS is windows2000, default user id will be login name.如果在 server 端的使用者權限設定不全,就會出現2035。例:user 不存在,user 不在可執行 mq 權限的 group 裡。
有關權限的問題有很多可以做的,我只知道這一個。
1.3 似乎可以在 client 的程式裡,指定 userid。例,使用 Env.properties.Add(IBM.WMQ.MQC.USER_ID_PROPERTY, "mqmadmin")。(這部份還沒有試)
2 .NET
2.1 據說到了 CSD11 之後才有.NET 專用的 class 可以用,所以,如果找不到某個謎之 dll 的話,那就只好乖乖用 COM 元件來玩吧。
2.2 用 COM 元件來寫也不是不行,只是看 code 的人一定會瘋掉。
2.3 有了專用元件,才有辦法使用 client-server 的方式連結。否則,只有 binding 的方式可以用。原因是,.NET完全不看系統環境變數。
reference:
[1]
http://www.codeproject.com/useritems/DotNetWebSphere.asp[2]
http://www.mqseries.net/phpBB/viewtopic.php?p=83730&sid=1aba0abbac445f7bb630dd3c1bc5f4debetaparticle 發表在 痞客邦 留言(0) 人氣(486)
先說明,接下來的論點沒有經過證實。只是有人用視覺化的方法表達他想表達的論點。
M$ server 常被攻擊成功的原因,不是這次我想表達的。
重點是,圖要是表達的好,可以給人深刻的印象。
http://www.visualcomplexity.com/vc/project_details.cfm?id=392&index=392&domain=
http://blogs.zdnet.com/threatchaos/?p=311請連到上面的連結看。看原文是比較好,但是我把我看完的心得略述一下。
圖的作者說,一個系統是否容易被攻擊成功,主要是看buffer overflow attack 是否容易成功。
駭客會檢查,每個 system call 的 memory address 是否有漏洞可以造成 buffer overflow,進而攻擊。
所以,越多的 system call,就越多機會產生漏洞。(指的是每一次操作會使用到的一串 system call 的連結越長,出問題機會就越高)
此外,越多 system call,也代表系統越複雜,越有可能開發人員會漏檢查。
聽起來很合理。我也相信了。
所以該作者舉了一個例子,"一個 html page 裡有個圖片",兩種 server 會使用到的 system call 有多少,有多複雜呢?
大家看了就知道了。

左邊是apache on linux,右邊是IIS on windows
但是我有些還沒有去仔細想的,例如,圖的編排是否有最佳化,同樣一個圖,點放的位置不好也是很亂的。
所以我沒有完全的相信,先參考看看。一眼看下去,真的差很多。
其實結合軟體工程的課,及孫老師的專長,應該可以研究一個方法來好好的排好之後,拿來做軟體健康度的計算,
每個eap算亂的程度,低於一個程度的要重寫。這可以當論文嗎?還是只能算應用?
為了找論文題目,我是逢人就亂問,我想,我的個性來做研究,可能會急死一堆人吧。
我老是找不到,問題在哪裡,有什麼好做的。而我覺得可以做的,別人都覺得沒有意義。
在此,還是謝謝大家的幫忙。
而且,持續地請大家幫忙,若是有發現題目可以做的,請告訴我。
(那個,用體感的,就先不要了吧,我老師罵人了。)
betaparticle 發表在 痞客邦 留言(0) 人氣(11)
kuro上的 distro 換來換去,從gentoo換到debian,又換回 gentoo。
果然人老了,學新東西不如用舊東西。
最後還是 gentoo 被我搞定了。
簡而言之,指令只是
emerge --sync
emerge -uD world
emerge samba
emerge webmin
但是,中間有很多要手動解決的,還好,gentoo的特色就是,什麼都是從source來,
所以,當發生問題時,沒有人可以幫你的時候,你可以慢慢地研究,該怎麼解決。
而我用 debian,apt-get update 就出事了,對我而言,無解。因為我不會解。
deb list 要是沒有你要的程式怎辦?對我而言,無解。
找不到可以用的 deb server 怎辦?
我相信高手們一定可以解決我上述的問題,只是,我不是高手,等也等不到他們來解決我的問題。
因為,他們不一定會用 kuro 裝 debian。就算他們裝了,也很早就裝了,一路升級是不會出問題。
但是一次要升很多級,就會跟我一樣出人命。中間的那些 patch,早已不在了。
只有請他們把現在的系統打包一份之外,別無他法,否則,就是我來當高手了,當然,不可能。
而 gentoo 又如何?
我可以從 emerge 指令中,知道,某些套件因為被限制,所以無法安裝最新版。
我可以手動把那些限制拿掉,讓 emerge 幫我裝上最新的套件來試試。
但最大的缺點就是,compile 時間超久,這次,不是一、兩天可以 compile 完的。
所以,搞了這麼久。
只是,做完了之後,不敢重開。
因為最重要的 init script 換過了,確定 dhcpcd 被拿掉,若是重開不成功,ip 是不會 assign 的,到時我要連也連不上。
而且,init script 裡,絕對不會有特製的 kuro 專用的 script,也就是說緊急小紅鈕肯定會失效,連想進 EM-mode (救援 mode)都進不去,也就無法救援了。
只能接一個全新硬碟強迫進 EM-mode,那就要拆硬碟了。現在不想這麼做。
所以,只能等到有人可以給我他改好的 patch file,或是我自己 trace script 自己改。
又要等很久了…。
betaparticle 發表在 痞客邦 留言(0) 人氣(171)