以前一直為了無法在 ubuntu 8.04 之前的版本使用華為的 3G 無線網卡而很少使用 Ubuntu, 說到這個,因為之前跑去鴻海這個鳥地方,網路常常被擋,所以申請 3G 門號後,把家裡的 ADSL 停掉了,也因此變成只能用 Windows 上網,幸好,今天在灌了 Ubuntu 8.10 rc1 之後,終於通了。
8.10 絕對是值得使用的,除了 3G 之外,還有藍芽也變得好設定,無線網路也是,總之一個爽。另外還看到多了一個 "Create USB startup disk", 雖然這功能我都是手動處理。
2008/10/30
2008/10/28
遠端備份? tar netcat
大家都知道可以用 tar 來備份 copy filesystem between computers教你怎麼在多台電腦上互相備份。
電腦 A, IP 192.168.10.101
cd /mnt/sda1
tar -czpsf - . | pv -b | nc -l 3333
電腦 B,
cd /mnt/sdb1
nc 192.168.10.101 3333 | pv -b | tar -xzpsf -
其中 pv 是 pipe viewer, 功用是用來看傳檔過程的「進度」,不見得系統中有此命令,可以安裝後再用或是直接省略掉,那就變成:
電腦 A, IP 192.168.10.101
cd /mnt/sda1
tar -czpsf - . | nc -l 3333
電腦 B,
cd /mnt/sdb1
nc 192.168.10.101 3333 | tar -xzpsf -
電腦 A, IP 192.168.10.101
cd /mnt/sda1
tar -czpsf - . | pv -b | nc -l 3333
電腦 B,
cd /mnt/sdb1
nc 192.168.10.101 3333 | pv -b | tar -xzpsf -
其中 pv 是 pipe viewer, 功用是用來看傳檔過程的「進度」,不見得系統中有此命令,可以安裝後再用或是直接省略掉,那就變成:
電腦 A, IP 192.168.10.101
cd /mnt/sda1
tar -czpsf - . | nc -l 3333
電腦 B,
cd /mnt/sdb1
nc 192.168.10.101 3333 | tar -xzpsf -
淺談觸控螢幕 what difference between touch screen, mouse, keyboard
觸控螢幕的價值,在於讓使用者對裝置(含 NB, Mobile)的操作習慣更人性化。當然離人性化或許也還很長。
現有的作業系統,全都在滑鼠、鍵盤的裝置上操作。其中鍵盤是為了輸入,要人性化必須加入語音與手勢,硬體相對麻煩,而滑鼠則用來定位。這兩者都容易扭曲人體力學,容易罹患什麼網球肘之類的疼痛。觸控螢幕可以減低這種痛苦,另外也減輕滑鼠定位的不便性,甚至可以利用來做手寫輸入,對小裝置而言,在設計上也可以減少滑鼠、鍵盤帶來的不便性(醜、貴)。
觸控螢幕不應該只視為滑鼠,在我想像中,它就是輸入裝置,應該是滑鼠與鍵盤兩種兼具,因此勢必打破現有的作業系統架構。在 Windows 上,有兩種作法,簡單說明如下:
一、利用 DLL 共享資訊。Application 應該有能力自行取得觸控螢幕的資訊,像有幾個觸控點,位置,大小,移動速度等。
二、利用 SendMessage 搭配 WM_COPYDATA 訊息來溝通。這一點主要是要用來做手勢,想像中,應該有一個「服務」就叫 gesture service, 要有辦法像滑鼠事件或鍵盤事件,傳遞手勢事件出來。當然,這在現行作業系統中並無此項設計,所以才說搭配 WM_COPYDATA。這機制可以自訂訊息格式。
觸控螢幕與鍵盤滑鼠不同的地方在於,它並不像鍵盤有那麼多按鍵,也沒有滑鼠的「左右鍵」。因此硬要將之轉換成滑鼠鍵盤事件,總是有很大的差異,而限制也很大。譬如,怎麼發出滑鼠右鍵?事實上,滑鼠的設計有單鍵、雙鍵、三鍵、三鍵+滾輪等不同的設計,沒必要硬要讓觸控螢幕當成滑鼠。
參考資料:
http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms649009(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms648710(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms649010(VS.85).aspx
現有的作業系統,全都在滑鼠、鍵盤的裝置上操作。其中鍵盤是為了輸入,要人性化必須加入語音與手勢,硬體相對麻煩,而滑鼠則用來定位。這兩者都容易扭曲人體力學,容易罹患什麼網球肘之類的疼痛。觸控螢幕可以減低這種痛苦,另外也減輕滑鼠定位的不便性,甚至可以利用來做手寫輸入,對小裝置而言,在設計上也可以減少滑鼠、鍵盤帶來的不便性(醜、貴)。
觸控螢幕不應該只視為滑鼠,在我想像中,它就是輸入裝置,應該是滑鼠與鍵盤兩種兼具,因此勢必打破現有的作業系統架構。在 Windows 上,有兩種作法,簡單說明如下:
一、利用 DLL 共享資訊。Application 應該有能力自行取得觸控螢幕的資訊,像有幾個觸控點,位置,大小,移動速度等。
二、利用 SendMessage 搭配 WM_COPYDATA 訊息來溝通。這一點主要是要用來做手勢,想像中,應該有一個「服務」就叫 gesture service, 要有辦法像滑鼠事件或鍵盤事件,傳遞手勢事件出來。當然,這在現行作業系統中並無此項設計,所以才說搭配 WM_COPYDATA。這機制可以自訂訊息格式。
觸控螢幕與鍵盤滑鼠不同的地方在於,它並不像鍵盤有那麼多按鍵,也沒有滑鼠的「左右鍵」。因此硬要將之轉換成滑鼠鍵盤事件,總是有很大的差異,而限制也很大。譬如,怎麼發出滑鼠右鍵?事實上,滑鼠的設計有單鍵、雙鍵、三鍵、三鍵+滾輪等不同的設計,沒必要硬要讓觸控螢幕當成滑鼠。
參考資料:
http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms649009(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms648710(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms649010(VS.85).aspx
標籤:
touch screen
2008/10/17
Dillo, embedded browser 嵌入式裝置的良伴
若要選擇嵌入式的瀏覽器,相信很多人會選擇 Opera, 或是 Webkit, 但是我曾經選過 Dillo, 又小速度又快,就算只拿來當 UI 也很棒,因此推薦給大家,目前正推出 2.0 版。其實不少人愛用 Dillo, 雖然它沒有良好支援 Javascript,但是拿來看日常的網站也都正常。
2008/10/16
SVN 版本控管
這樣的文件雖然很多,但是這篇是我的同事寫的,在我的辦公室經驗同仁驗證,我只是代為貼上來,他叫 Johnnie.
什麼是SVN?
SVN全名Subversion,是一個版本控制系統版本控制系統,相對於的RCS、CVS,採用了分支管理系統,它的設計目標就是取代CVS。網際網路上免費的版本控制服務多採用Subversion。
本文主要簡述:1. SVN Repository的架設 2. User如何在client端的電腦透過SVN對檔案作版本控制。
需要更詳細的說明,可參考下面的資料:
Subversion官方網站
TortoiseSVN官方網站
SVN Book(英文)
SVN Book(中譯)
Wiki
TortoseSVN 使用簡介
相當實用的電子書
Subversion (Sever端) 資料庫的建立流程
1. 首先到 SVN官方網站 http://subversion.tigris.org/下載Subversion, 並且在server端的電腦安裝 svn-1.4.3-setup.exe
2. 安裝完後, 點選 開始à執行,輸入 cmd svn
3. 接下來, 建立一個你要的資料庫(目錄/資料夾),例如 C:\Repository\test, 在文字模式底下輸入命令
svnadmin create C:\Repository\test
4. 在剛建立的目錄下(test), 裡面會有 3 個檔案
authz
passwd
svnserve.conf
5. 將這3個設定檔換成下面的範例
passwd 檔案設定範例
[users]
User = 123456
svnserver.conf 檔案設定範例
[general]
anon-access = none
auth-access = write
password-db = ../../passwd #小技巧可以讓很多Project 共用一份密碼檔案
authz-db = ../../authz ##小技巧可以讓很多Project 共用一份權限設定
authz 檔案
[groups]
# 註解
RD = User
[:/]
#root 的存取權限
@RD = rw
User = rw
[AlarmTest:/]
#每個目錄都需要來一段,要不然不會動
@RD = rw
[temp:/]
#temp 任意人都可以讀取
* = r
6. 點選 開始->執行, 然後在文字模式底下輸入命令輸入:
sc create Subversion binPath= "c:\Program Files\Subversion\bin\svnserve.exe --service -r C:\Repository" DisplayName= "Subversion" start= auto depend= TCPIP
7. 點選我的電腦按右鍵, 管理->服務及應用程式->Subversion
並且在服務狀態那點選啟動
8. 進行測試,在文字模式底下輸入命令:
svn co svn://localhost/test C:\MyProject
localhost 為本機的網域名稱(因為SVN架在自己的機器上面所以使用 localhost或是 127.0.0.1),理論上應該伺服器的IP或是網域名稱
P.S 如果還不行連到svn 的database,去檢查防火牆是否開啟,在控制台底下點選Windows防火牆,點選 例外->新增連接戶->確定,然後新開一個port:
名稱 :Subversion
連接戶編號:3690
TortoiseSVN (Client端) 使用流程
1. 首先到SVN官方網站下載TortoiseSVN,並且在你的電腦安裝 TortoiseSVN-1.5.4.14259-win32-svn-1.5.3.msi
2. 安裝成功後,按下滑鼠右鍵,應該可以看到下圖:
3. 取得(Checkout) Repository?
例如:在你的桌面上新增一個Working資料夾,點選滑鼠右鍵,選擇 SVN Checkout…,在URL of repository欄位中,輸入server端資料庫的路徑:
svn://10.243.12.167/test
輸入使用者的帳號和密碼,點選OK
4. 如何新增檔案或目錄到Repository?
需在檔案或目錄的icon上面,按滑鼠右鍵並且選擇TortoiseSVN->Add,TortoiseSVN會把要加入的檔案或目錄顯示出來,打勾的表示要被加入到Repository。 注意!Add的動作並未將檔案放到Repository中,它只告知SVN準備要在Repository中放入這些檔案,因此,如果你檢視這些檔案時,會看到一個驚嘆號標誌在檔案icon的下方。
注意:新增的檔案要經過提交(Commit)的動作才回真正的放入Repository
5. 如何提交(Commit)修改過的檔案或目錄?
需在檔案或目錄的icon上面,按滑鼠右鍵並且選擇SVN Commit…
在Message欄位中輸入本次提交的紀錄訊息,以利日後版本追蹤
6. 更新(Update)檔案或目錄
為何需要更新?由於版本控制系統多半都是由許多人共同使用。所以,相同的檔案可能還有人會去進行編輯或修改。為了確保你工作目錄中的檔案與Repository中的檔案是同步的,建議你在編輯前都先進行更新的動作。
在想要更新的檔案或目錄icon上面按下滑鼠右鍵,並且選擇SVN Update
什麼是SVN?
SVN全名Subversion,是一個版本控制系統版本控制系統,相對於的RCS、CVS,採用了分支管理系統,它的設計目標就是取代CVS。網際網路上免費的版本控制服務多採用Subversion。
本文主要簡述:1. SVN Repository的架設 2. User如何在client端的電腦透過SVN對檔案作版本控制。
需要更詳細的說明,可參考下面的資料:
Subversion官方網站
TortoiseSVN官方網站
SVN Book(英文)
SVN Book(中譯)
Wiki
TortoseSVN 使用簡介
相當實用的電子書
Subversion (Sever端) 資料庫的建立流程
1. 首先到 SVN官方網站 http://subversion.tigris.org/下載Subversion, 並且在server端的電腦安裝 svn-1.4.3-setup.exe
2. 安裝完後, 點選 開始à執行,輸入 cmd svn
3. 接下來, 建立一個你要的資料庫(目錄/資料夾),例如 C:\Repository\test, 在文字模式底下輸入命令
svnadmin create C:\Repository\test
4. 在剛建立的目錄下(test), 裡面會有 3 個檔案
authz
passwd
svnserve.conf
5. 將這3個設定檔換成下面的範例
passwd 檔案設定範例
[users]
User = 123456
svnserver.conf 檔案設定範例
[general]
anon-access = none
auth-access = write
password-db = ../../passwd #小技巧可以讓很多Project 共用一份密碼檔案
authz-db = ../../authz ##小技巧可以讓很多Project 共用一份權限設定
authz 檔案
[groups]
# 註解
RD = User
[:/]
#root 的存取權限
@RD = rw
User = rw
[AlarmTest:/]
#每個目錄都需要來一段,要不然不會動
@RD = rw
[temp:/]
#temp 任意人都可以讀取
* = r
6. 點選 開始->執行, 然後在文字模式底下輸入命令輸入:
sc create Subversion binPath= "c:\Program Files\Subversion\bin\svnserve.exe --service -r C:\Repository" DisplayName= "Subversion" start= auto depend= TCPIP
7. 點選我的電腦按右鍵, 管理->服務及應用程式->Subversion
並且在服務狀態那點選啟動
8. 進行測試,在文字模式底下輸入命令:
svn co svn://localhost/test C:\MyProject
localhost 為本機的網域名稱(因為SVN架在自己的機器上面所以使用 localhost或是 127.0.0.1),理論上應該伺服器的IP或是網域名稱
P.S 如果還不行連到svn 的database,去檢查防火牆是否開啟,在控制台底下點選Windows防火牆,點選 例外->新增連接戶->確定,然後新開一個port:
名稱 :Subversion
連接戶編號:3690
TortoiseSVN (Client端) 使用流程
1. 首先到SVN官方網站下載TortoiseSVN,並且在你的電腦安裝 TortoiseSVN-1.5.4.14259-win32-svn-1.5.3.msi
2. 安裝成功後,按下滑鼠右鍵,應該可以看到下圖:
3. 取得(Checkout) Repository?
例如:在你的桌面上新增一個Working資料夾,點選滑鼠右鍵,選擇 SVN Checkout…,在URL of repository欄位中,輸入server端資料庫的路徑:
svn://10.243.12.167/test
輸入使用者的帳號和密碼,點選OK
4. 如何新增檔案或目錄到Repository?
需在檔案或目錄的icon上面,按滑鼠右鍵並且選擇TortoiseSVN->Add,TortoiseSVN會把要加入的檔案或目錄顯示出來,打勾的表示要被加入到Repository。 注意!Add的動作並未將檔案放到Repository中,它只告知SVN準備要在Repository中放入這些檔案,因此,如果你檢視這些檔案時,會看到一個驚嘆號標誌在檔案icon的下方。
注意:新增的檔案要經過提交(Commit)的動作才回真正的放入Repository
5. 如何提交(Commit)修改過的檔案或目錄?
需在檔案或目錄的icon上面,按滑鼠右鍵並且選擇SVN Commit…
在Message欄位中輸入本次提交的紀錄訊息,以利日後版本追蹤
6. 更新(Update)檔案或目錄
為何需要更新?由於版本控制系統多半都是由許多人共同使用。所以,相同的檔案可能還有人會去進行編輯或修改。為了確保你工作目錄中的檔案與Repository中的檔案是同步的,建議你在編輯前都先進行更新的動作。
在想要更新的檔案或目錄icon上面按下滑鼠右鍵,並且選擇SVN Update
標籤:
Subversion,
svn,
TortoseSVN
2008/10/15
winXP 回復 mbr?
最近拿了顆外接硬碟灌了 ubuntu, 結果卻害我的硬碟無法從原來的 C: 開機,後來找到這篇restore your MBR,裡頭提到工具可以在此找到 ,執行時要加參數,所以你要知道放哪兒,文中提到放 C:\ 最簡單,命令如下:
MbrFix /drive 0 fixmbr /yes
MbrFix /drive 0 fixmbr /yes
讓 bash script 具多重檔案的輸入
bash redirecting input multiple files一文提到怎樣讓你的 shell script 能夠同時由標準輸入轉向讀多個檔,簡單講就是像:
這寫法有幾點可以提出來談:
一、 while 那行尾部的 <&7 及 <&8 這種寫法,是把 file handler 轉向輸入,若你會寫 C/C++ 的話,可以用 fileno(FILE*) 來取得 file handler, 是個整數,沒錯,就是這邊的 7, 8 的意思。(註: 或由低階函數 open() 所傳回的也是此 file handler)
二、檔案後面二行的 7<$1 及 8<$2 是把命令參數第一個當 file handler 7, 第二個參數當 file handler 8。因此搭配第一點就變成: 把第一個參數的檔由 f1 讀,而第二個參數的檔由 f2 讀
三、這種寫法適用範圍不多,因此少有人提,若不是像文中所提要拿來比較(或逐行並列)的話,比較常見的用法是把多個檔一行一行讀進來,那很簡單只需要用 cat File1 File2 | YOUR_SCRIPT 的方式即可。
#!/bin/bash
while read f1 <&7
do
read f2 <&8
echo $f1 $f2
done \
7<$1 \
8<$2
這寫法有幾點可以提出來談:
一、 while 那行尾部的 <&7 及 <&8 這種寫法,是把 file handler 轉向輸入,若你會寫 C/C++ 的話,可以用 fileno(FILE*) 來取得 file handler, 是個整數,沒錯,就是這邊的 7, 8 的意思。(註: 或由低階函數 open() 所傳回的也是此 file handler)
二、檔案後面二行的 7<$1 及 8<$2 是把命令參數第一個當 file handler 7, 第二個參數當 file handler 8。因此搭配第一點就變成: 把第一個參數的檔由 f1 讀,而第二個參數的檔由 f2 讀
三、這種寫法適用範圍不多,因此少有人提,若不是像文中所提要拿來比較(或逐行並列)的話,比較常見的用法是把多個檔一行一行讀進來,那很簡單只需要用 cat File1 File2 | YOUR_SCRIPT 的方式即可。
2008/10/08
你的PRIVACY 2.0
在【科學人2008年第80期10月號】裡有一篇文章講「你的PRIVACY 2.0」,也非常值得深思,我一樣再摘出一小小段與大家分享:
■隱私遭到侵犯通常被當成是其他類型的傷害。
■「失去隱私」事實上可能是「失去安全」。
■如果每個人都能夠負擔得起醫療照護,那麼對遺傳隱私的焦慮應該會消失大半。
■民眾應該有權監控並公佈與政府活動及政府官員相關的資訊。
■人們正獲得有效的工具,可以自行掌控想要公佈哪些個人資料,以及所公佈的對象。
■隱私遭到侵犯通常被當成是其他類型的傷害。
■「失去隱私」事實上可能是「失去安全」。
■如果每個人都能夠負擔得起醫療照護,那麼對遺傳隱私的焦慮應該會消失大半。
■民眾應該有權監控並公佈與政府活動及政府官員相關的資訊。
■人們正獲得有效的工具,可以自行掌控想要公佈哪些個人資料,以及所公佈的對象。
資料融合:整合你的一舉一動
科學人2008年第80期10月號裡面有一篇文章說到「資料融合:整合你的一舉一動」這件事,我個人到底是什麼想法呢?先不管,但是大家可以前往看看。
該網址已經是書摘了,我把摘一小小段出來:
資料融合的用途廣泛,而應用在尋找潛藏的恐怖份子時,引起了最激烈的公共辯論。美國海軍少將彭岱特(John Poindexter)與國防高等研究計畫署(DARPA)的波普(Robert L. Popp)在2006年表示:「偵測恐怖份子的關鍵在於觀察現在與過去恐怖攻擊的計畫,據此尋找恐怖攻擊計畫的行動模式。」他們認為如果美國政府能從市場交易的資料庫中,找出不是農民卻大量購買肥料的記錄,那麼1993年的世貿中心爆炸案、1995年的俄克拉荷馬爆炸案都是可以避免的。但是想要取得這些購買記錄,並與農田所有者與聘僱記錄的資料庫媒合,政府必須史無前例地取得私人電腦系統的使用權,全國每個人的每筆轉帳記錄都會在沒有正當理由的情形下受到監控。基於上述理由,國會決定在2003年取消彭岱特與波普的「全面資訊監控」(TIA)研究計畫。
該網址已經是書摘了,我把摘一小小段出來:
資料融合的用途廣泛,而應用在尋找潛藏的恐怖份子時,引起了最激烈的公共辯論。美國海軍少將彭岱特(John Poindexter)與國防高等研究計畫署(DARPA)的波普(Robert L. Popp)在2006年表示:「偵測恐怖份子的關鍵在於觀察現在與過去恐怖攻擊的計畫,據此尋找恐怖攻擊計畫的行動模式。」他們認為如果美國政府能從市場交易的資料庫中,找出不是農民卻大量購買肥料的記錄,那麼1993年的世貿中心爆炸案、1995年的俄克拉荷馬爆炸案都是可以避免的。但是想要取得這些購買記錄,並與農田所有者與聘僱記錄的資料庫媒合,政府必須史無前例地取得私人電腦系統的使用權,全國每個人的每筆轉帳記錄都會在沒有正當理由的情形下受到監控。基於上述理由,國會決定在2003年取消彭岱特與波普的「全面資訊監控」(TIA)研究計畫。
2008/10/06
Prism 讓 web application 成為真正的應用程式
這題目是最近在思考「瀏覽器能做什麼」下的產物,但是我一直在關注這議題。若我前一封說 Mozilla/Firefox 瀏覽器現在正適合拿來開發應用程式,其中有一個算是重要的技術是「離線瀏覽」,像google gears據說要內建於 Mozilla 之中,它就是可以讓你把 google docs變成本地端的應用程式,在你沒上網的時候仍然可以用。
那麼有另一項議題,要使用上面所述的網路應用程式,為什麼一定要開啟瀏覽器?也會因為瀏覽器的 theme 讓網路應用程式看起來就有那麼一點不倫不類的感覺。是的,Mozilla 很早以前就提供 XUL runner, 可是這也得是「XUL」才行,最近有個擴充套件叫Prism, 早期叫Webrunner, 在該頁說明就有提到現有示範的網路應用程式有:
* Gmail: gmail.webapp
* Google Calendar: gcalendar.webapp
* Google Docs: gdocs.webapp
* Google Groups: groups.webapp
* Google Analytics: ganalytics.webapp
* Google Reader: greader.webapp
* Facebook: facebook.webapp
* Twitter: twitter.webapp
像這樣的應用,我覺得頗適合像 MID 或是 Smart Phone 這類的手持裝置,讓你可以把網站所提供的服務當成真正的應用程式般放到桌面。
標籤:
web application
2008/10/03
瀏覽器能為你做什麼? What can mozilla do?
要開發應用程式,難免不會想到用 C/C++/Java 來開發,可是愈來愈多的案例證明,應用程式,若沒連上網路則有如垃圾一般,就算是遊戲也是如此。
寫應用程式難免要顧慮到 GUI, 也要顧慮到上網這件事,GUI 不管在 VC++, BCB, Java 等等都有不錯的套件足以因應,就算是上網也都有有辦法用這些語言開發完成。可是在愈來愈多的網路應用出現後,Google, Yahoo, Microsoft 致力推展所謂的雲端運算的目的不外乎把開發者的眼光集中,透過瀏覽器來開發網路應用程式變得愈來愈成熟。
開發 Native Internet Application 必須花大量的心思在 cookie, proxy, user authentication, 或 encryption/decryption 等等議題上,還不止如此,包括應用程式功能如何擴充?外觀如何提供讓使用者自訂的能力?多國語言如何完成?如何提供 3rd party 或 end-user 自行開發新功能?如何共享成果?
不多說廢話,讓我把心力專注在 Mozilla 上面。有興趣的人可以到 發展 Mozilla去讀。
Topic 項下提到:
* Extensions : 利用像 XUL 這種標準來擴充與發展自有應用
* Plugins : 有些瀏覽器尚未提供,或是想要把原始碼隱藏的更好的人,可以利用這項來開發應用
* Themes : 外觀
* Embedding Mozilla: 將瀏覽器嵌入到自己的應用程式中,也就是讓自己的應用程式輕鬆的具有瀏覽器功能,或是開發精簡型的瀏覽器
* Accessibility: 對身體部份功能不良的人可以自訂存取方式,例如聲控什麼的
* Localization: 多國語系
* Web Standards: W3C 標準的支援
* Web Development: 網頁/網站的開發
* Developing Mozilla: 若想投身瀏覽器開發的人,Mozilla 是個很好的切入點
* Quality Assurance: 品質保證
* Security: 安全認證
以上您或許還看不出可以怎樣利用 Mozilla,那讓我們再看看 Technologies 項目:
* AJAX - Asynchronous JavaScript and XML : 最有名的就是 google ajax api 或 GWT 或 Yahoo UI
* CSS - Cascading Style Sheets
* DOM - Document Object Model
* HTML - Hypertext Markup Language
* JavaScript : 這四項應該不必多說,標準瀏覽器應該具備的功能
* NSS - Network Security Services: 用來讓網路存取更加安全
* RDF - Resource Description Framework : 開發 extension 必備
* RSS - Really Simple Syndication : 這項已經變成我每天閱讀新聞的工具
* SVG - Scalable Vector Graphics : 純量畫圖的,個人認為把 papervision3D 移植並非難事,不過目前的發展似乎反過來,在 pv3d 中處理 SVG 比較成熟
* XBL - Extensible Binding Language : 用來 binding 網頁應用程式上的元件到你的程式,也就是你可以自訂元件工作的方式
* XForms - XML Forms : 這個是把 Form 以 XML 的方式傳送,除了資訊的表達更清晰外,還可以有更多的「動作」,兼減輕 CGI/Javascript 並且讓資料庫伺服器自行分析減輕開發者的壓力。
* XML - Extensible Markup Language : 不必我多說
* XML Web Services - SOAP, XML-RPC, etc.: SOAP 叫精簡物件存取協定,顧名思義不難瞭解,就是用來直接傳遞「以 XML 表達的物件」,AJAX 比較傾向於單向的要資料,而這個掛了個 RPC 就不難理解為雙向的交換資料
* XPath - XML Path Language: 用來指定 XML 元件在 XML 文件中的位置,會比 document.getElementById() 還方便有效率。不過個人沒在用這項功能,在允許的情況下會直接以 JSON 或 document.getElementById() 的方式存取 XML
* XSLT - Extensible Stylesheet Language Transformations : 上面 XPath 比較有用的應用是在搭配 XSLT。XSLT 簡單講是用來轉換 XML 成 HTML 或純文字之類的成果以便閱讀。另外因為 XML 允許自訂 tag, 因此彼此間的轉換也成為擾人的議題,這是 XSLT 存在的主要原因。而搭配 XPath 就可以很方便的互相引用。
* XUL - XML User Interface Language : 這是發展瀏覽器 extension 最佳利器,自行發展 web application!
其實 Mozilla 能做的事遠遠無法從上面看出來,我比較喜歡的兩項功能分別是:Server Socket 與 SQLite 的支援,這可以讓我們做不少事,後面抽空再來介紹。
要利用 Mozilla 瀏覽器開發網路應用程式就應該對 XULRunner 及 XUL 參考手冊有所涉略。
後面會再來探討 Mozilla 用來開發 3D web application 的議題。若有人要自行編譯 Mozilla, 請參考 在 Windows 下編譯 Mozilla一文
寫應用程式難免要顧慮到 GUI, 也要顧慮到上網這件事,GUI 不管在 VC++, BCB, Java 等等都有不錯的套件足以因應,就算是上網也都有有辦法用這些語言開發完成。可是在愈來愈多的網路應用出現後,Google, Yahoo, Microsoft 致力推展所謂的雲端運算的目的不外乎把開發者的眼光集中,透過瀏覽器來開發網路應用程式變得愈來愈成熟。
開發 Native Internet Application 必須花大量的心思在 cookie, proxy, user authentication, 或 encryption/decryption 等等議題上,還不止如此,包括應用程式功能如何擴充?外觀如何提供讓使用者自訂的能力?多國語言如何完成?如何提供 3rd party 或 end-user 自行開發新功能?如何共享成果?
不多說廢話,讓我把心力專注在 Mozilla 上面。有興趣的人可以到 發展 Mozilla去讀。
Topic 項下提到:
* Extensions : 利用像 XUL 這種標準來擴充與發展自有應用
* Plugins : 有些瀏覽器尚未提供,或是想要把原始碼隱藏的更好的人,可以利用這項來開發應用
* Themes : 外觀
* Embedding Mozilla: 將瀏覽器嵌入到自己的應用程式中,也就是讓自己的應用程式輕鬆的具有瀏覽器功能,或是開發精簡型的瀏覽器
* Accessibility: 對身體部份功能不良的人可以自訂存取方式,例如聲控什麼的
* Localization: 多國語系
* Web Standards: W3C 標準的支援
* Web Development: 網頁/網站的開發
* Developing Mozilla: 若想投身瀏覽器開發的人,Mozilla 是個很好的切入點
* Quality Assurance: 品質保證
* Security: 安全認證
以上您或許還看不出可以怎樣利用 Mozilla,那讓我們再看看 Technologies 項目:
* AJAX - Asynchronous JavaScript and XML : 最有名的就是 google ajax api 或 GWT 或 Yahoo UI
* CSS - Cascading Style Sheets
* DOM - Document Object Model
* HTML - Hypertext Markup Language
* JavaScript : 這四項應該不必多說,標準瀏覽器應該具備的功能
* NSS - Network Security Services: 用來讓網路存取更加安全
* RDF - Resource Description Framework : 開發 extension 必備
* RSS - Really Simple Syndication : 這項已經變成我每天閱讀新聞的工具
* SVG - Scalable Vector Graphics : 純量畫圖的,個人認為把 papervision3D 移植並非難事,不過目前的發展似乎反過來,在 pv3d 中處理 SVG 比較成熟
* XBL - Extensible Binding Language : 用來 binding 網頁應用程式上的元件到你的程式,也就是你可以自訂元件工作的方式
* XForms - XML Forms : 這個是把 Form 以 XML 的方式傳送,除了資訊的表達更清晰外,還可以有更多的「動作」,兼減輕 CGI/Javascript 並且讓資料庫伺服器自行分析減輕開發者的壓力。
* XML - Extensible Markup Language : 不必我多說
* XML Web Services - SOAP, XML-RPC, etc.: SOAP 叫精簡物件存取協定,顧名思義不難瞭解,就是用來直接傳遞「以 XML 表達的物件」,AJAX 比較傾向於單向的要資料,而這個掛了個 RPC 就不難理解為雙向的交換資料
* XPath - XML Path Language: 用來指定 XML 元件在 XML 文件中的位置,會比 document.getElementById() 還方便有效率。不過個人沒在用這項功能,在允許的情況下會直接以 JSON 或 document.getElementById() 的方式存取 XML
* XSLT - Extensible Stylesheet Language Transformations : 上面 XPath 比較有用的應用是在搭配 XSLT。XSLT 簡單講是用來轉換 XML 成 HTML 或純文字之類的成果以便閱讀。另外因為 XML 允許自訂 tag, 因此彼此間的轉換也成為擾人的議題,這是 XSLT 存在的主要原因。而搭配 XPath 就可以很方便的互相引用。
* XUL - XML User Interface Language : 這是發展瀏覽器 extension 最佳利器,自行發展 web application!
其實 Mozilla 能做的事遠遠無法從上面看出來,我比較喜歡的兩項功能分別是:Server Socket 與 SQLite 的支援,這可以讓我們做不少事,後面抽空再來介紹。
要利用 Mozilla 瀏覽器開發網路應用程式就應該對 XULRunner 及 XUL 參考手冊有所涉略。
後面會再來探討 Mozilla 用來開發 3D web application 的議題。若有人要自行編譯 Mozilla, 請參考 在 Windows 下編譯 Mozilla一文
標籤:
mozilla
2008/10/02
Bash 參數的展開
bash parameter expansion一文對 bash 在變數(參數)的解釋有不錯的說明。
寫 shell script 不難,變數(參數)的取用也相對容易,最簡單的是像 $a 這種型式,指定值的時候是 a=變數值, 早期等號(=)前後不能有空白,但是這邊提醒一下,養成良好的習慣遠比什麼效率或美感重要,通常我在引用變數時都寫成 ${a} 的方式。其中的原因在於不讓 shell 解釋錯誤,例如 ${a}bc。而像字串的比對,我也會加上引號,例如 [ "${a}" = "" ],因為你雖然可以很確定卻永遠不會知道 ${a} 是否真的正確定義。
因為上面的說明裡面講到「正確定義」這件事,所以 bash 有「預設值」的用法,b=${b:-預設值},例如 LENGTH=${LEN:-0} 就會在 LEN 沒被定義時指定 0 給 LENGTH
這邊有個 test.sh 裡面是這樣寫的:
除了使用了預設值的觀念外,平常 shell script 在執行時 TEST_MODE 的值是 0, 若你想機動的將之變成 test mode 相對上非常簡單,語法如下:
$ env TEST_MODE=1 sh test.sh
變數在使用時,有些「編輯」動作可以用,先講一個不常見的搜尋與取代用法 ${VAR/search/replace}:
結果會是 aa-dd-bcc <-- 只取代了一個,要想全部取代請用 ${VAR//search/replace}:
結果就會是 aa-dd--dd-cc。值得注意的是,別把 perl 常用的語法應用在這兒,取代的後面沒有斜線,我就不多寫省得學錯。
另外最出名的,就是 %, %%, #, ## 這種的編輯方式,直接舉例來看:
結果寫在註解中, # 與 % 的差別在於前置與後置,可以藉由在鍵盤上的排列來聯想,兩個都有著「餘」數的概念,其中 % 是將字串扣掉後面符合比對字串「最短」內容,因為比對字串是 /* 因此有三個 / 符合,扣掉最短的內容 /data.txt 後就剩下 /home/wade。而 ## 則是將字串扣掉前面符合比對字串「最長」內容。多用就會有感覺。
也可以取得變數特定位置的子字串,有點像 substr(),語法為 ${VAR:offset:length}, 其中 offset 若被省略表示從頭開始,而 length 省略表示一直到字串的最後,例如:
有一點值得注意的是,若 offset 是負數則表示從後面數過來,可是負數前面加上冒號 ':' 又會被解釋成預設值,因此得用 shell 的數學運算符號 $(( ... )),例如 $ echo ${VAR:$((-4)):1} 會輸出 '.' 這個字元,當然若能夠將數字的引用以變數取代就不會有此困擾,例如:
其它還可以傳回變數字串的長度,例如 echo ${#VAR} 的值是 19
有些內建變數也應該知道,例如 $$, $0, $1, $?, 其意義分別是: PID, 命令本身,第一個參數,以及前一命令的傳回值
寫 shell script 不難,變數(參數)的取用也相對容易,最簡單的是像 $a 這種型式,指定值的時候是 a=變數值, 早期等號(=)前後不能有空白,但是這邊提醒一下,養成良好的習慣遠比什麼效率或美感重要,通常我在引用變數時都寫成 ${a} 的方式。其中的原因在於不讓 shell 解釋錯誤,例如 ${a}bc。而像字串的比對,我也會加上引號,例如 [ "${a}" = "" ],因為你雖然可以很確定卻永遠不會知道 ${a} 是否真的正確定義。
因為上面的說明裡面講到「正確定義」這件事,所以 bash 有「預設值」的用法,b=${b:-預設值},例如 LENGTH=${LEN:-0} 就會在 LEN 沒被定義時指定 0 給 LENGTH
這邊有個 test.sh 裡面是這樣寫的:
TEST_MODE=${TEST_MODE:-0}
...
if [[ $TEST_MODE -eq 0 ]]; then
echo "Running in live mode"
else
echo "Running in test mode"
fi
除了使用了預設值的觀念外,平常 shell script 在執行時 TEST_MODE 的值是 0, 若你想機動的將之變成 test mode 相對上非常簡單,語法如下:
$ env TEST_MODE=1 sh test.sh
變數在使用時,有些「編輯」動作可以用,先講一個不常見的搜尋與取代用法 ${VAR/search/replace}:
VAR=aabbcc
echo ${VAR/b/-dd-}
結果會是 aa-dd-bcc <-- 只取代了一個,要想全部取代請用 ${VAR//search/replace}:
VAR=aabbcc
echo ${VAR//b/-dd-}
結果就會是 aa-dd--dd-cc。值得注意的是,別把 perl 常用的語法應用在這兒,取代的後面沒有斜線,我就不多寫省得學錯。
另外最出名的,就是 %, %%, #, ## 這種的編輯方式,直接舉例來看:
file=/home/wade/data.txt
echo "${file%/*}" # /home/wade
echo "${file##*/}" # data.txt
結果寫在註解中, # 與 % 的差別在於前置與後置,可以藉由在鍵盤上的排列來聯想,兩個都有著「餘」數的概念,其中 % 是將字串扣掉後面符合比對字串「最短」內容,因為比對字串是 /* 因此有三個 / 符合,扣掉最短的內容 /data.txt 後就剩下 /home/wade。而 ## 則是將字串扣掉前面符合比對字串「最長」內容。多用就會有感覺。
也可以取得變數特定位置的子字串,有點像 substr(),語法為 ${VAR:offset:length}, 其中 offset 若被省略表示從頭開始,而 length 省略表示一直到字串的最後,例如:
$ VAR=/home/wade/data.txt
$ echo ${VAR:10}
/data.txt
$ echo ${VAR::10}
/home/wade
有一點值得注意的是,若 offset 是負數則表示從後面數過來,可是負數前面加上冒號 ':' 又會被解釋成預設值,因此得用 shell 的數學運算符號 $(( ... )),例如 $ echo ${VAR:$((-4)):1} 會輸出 '.' 這個字元,當然若能夠將數字的引用以變數取代就不會有此困擾,例如:
echo $OFFSET=-4
echo ${VAR:$OFFSET:1}
其它還可以傳回變數字串的長度,例如 echo ${#VAR} 的值是 19
有些內建變數也應該知道,例如 $$, $0, $1, $?, 其意義分別是: PID, 命令本身,第一個參數,以及前一命令的傳回值
2008/10/01
lively another mud?
直接貼網址好了,現在愈來愈懶得寫字。
http://blogoscoped.com/archive/2008-07-09-n11.html
http://www.lively.com
http://sketchup.google.com/3dwarehouse/
Google 愈來做愈多 3D 的東西,頗有趣的是,似乎與我的想法若合符節。
http://blogoscoped.com/archive/2008-07-09-n11.html
http://www.lively.com
http://sketchup.google.com/3dwarehouse/
Google 愈來做愈多 3D 的東西,頗有趣的是,似乎與我的想法若合符節。
標籤:
3D,
MUD,
virtual reality
訂閱:
文章 (Atom)