分類
Javascript

有趣的JSON技術

寫 javascript 對一般的網頁程式設計人員來說, 應該是家常便飯, 舉凡一些需要在 client side 完成的事, 大多會利用 javascript 來操作, 例如滑鼠經過換色, 或是檢查 form (表單)在送出前的一些資料正確性檢查(ps. 一定要記得在 server side 也要再次檢查, 以確保資料的正確性)或方便使用者輸入的自動更正等功能.

javascript 的功能強大, 又加上高階, 物件化等特性, 使得撰寫 javascript 的程式設計人員十分愛用, 也方便許多在 client side 就可以先完成的一些動作, 再加上最近的 Ajax 風行, javascript 無疑變成十分熱門的語言.

JSON (Javascript Object Notation)相信很多人有聽過, 但也有很多人不知道這個東西, 他是附屬在 javascript 下的一組物件描述方法, 這個網站介紹十分詳細: http://www.json.org/, 有很容易了解的圖示幫助使用者了解 JSON 物件的描述方式.

JSON 是利用了成對的 {} 來包住各物件(object), 用成對的 [] 來包任各陣列(array), 用成對的 “” 來包住各字串, 用逗號來區隔各變數, 而資料型態有 string, number, array, object, 另外有三個常數, true, false, null. 下面描述了一個 object obj1 擁有兩個成員變數, 而另一個為 array 擁有 5 個 number 的範例:

{ 'obj1': {
  'child1':'value1',
  'child2':'value2'
  },
  'array1': [1, 2, 3, 4, 5]
};
分類
PHP

php error handling

今天來研究一下 php 的 error handling, 一般的程式錯誤, 很重要的一件事就是錯誤處理, php 當然也不例外. php 本身對於錯誤處理已有一套完整的設計, 讓程式設計人員可以很容易地進行錯誤處理.

我們可以參考內建 function 進行 error handler 設置, 這個 function 為 :
mixed set_error_handler ( callback error_handler [, int error_types] )

該 function 傳入的 callback function即為我們要使用的 error handling function, 該 function 定義如下:
handler ( int errno, string errstr [, string errfile [, int errline [, array errcontext]]] )

分類
Javascript

xmlRequest更換網頁內容

AJAX?

不就是這樣子嗎? 利用一種方法, 在不換頁的狀況下, request web 的 content 後, 進行訊息的顯示或是畫面的更新(dhtml), 這不就是 AJAX? 是的, 其實很容易也很簡單實現, 要做到不換頁更新畫面的方法就是這麼簡單.

分類
程式技術

有趣的rewrite

之前在設定 apache rewrite 感覺很有趣, 可以做很多應用, 加上功能強大, 幾乎可以將網址改的很炫很讚, 後來也玩了一下 ISAPI_Rewrite (網址: http://www.isapirewrite.com/), HELICON提供的 ISAPI_Rewrite 功能也類似, 免費版本 ISAPI_Rewrite Lite 可以使用於該 iis 上全部的網站, 所以若要設定個別的虛擬主機的 rewrite rule 時, 就要花錢買 ISAPI_Rewrite FULL. 當然 apache 的 rewrite module 是完全免費的囉.

分類
TatterTools

新增TT訪客計數器(VisitorStatistics 0.61)

看到 tt0.96 版本有一個計數器, 覺得應該在 1.05 版上也要有一個這樣的功能, 於是就著手製作一個 tt1.05 版本使用的計數器, 由於在1.05版是多人結構, 再加上要配合 plugin 的寫法, 所以比較複雜一點, 另外為避免功能單調, 除原來的 line graph外, 另外再多加上了 bar graph的型式, 這樣比較豐富一點, 產生的結果如下:

為能讓有 tt 的愛用者能協助測試, 目前版本定為 0.6 版, 請有興趣的朋友協助測試並告知是否有問題, 安裝方式如同一般的 plugin, 解開放在 plugins 目錄下, 由後台啟用該 plugin 即可, 並於使用的 skin 上, 加上要出現該訪客計數器的位置, 使用 [ ##_ VisitorStatistics _## ] 標籤(為避免衝碼, 用空格隔開, 實際標籤無空格)即可順利產出你的網站人數統計. 相信應該很容易使用.

更新記錄
[2006/6/24]
感謝Raie協助測試, 並告知 table 大小寫問題, 目前已更新完成, 版本同時更新為0.61版本完成.

下載點:
VisitorStatistics-0.61.zip

分類
程式技術

OCX版本及自動更新功能

(由於是使用 ActiveX 方式, 故僅支援 IE 的瀏覽器.)

使用網頁部署程式是最方便的, 因為每台電腦都有 web browser, 利用 ocx 的方式更是好用的更新方式, 然而, 版本檢查更新是該部署方式最好用的地方.

如何利用 ocx 部署應用程式, 並且自動偵測使用者端的版本及現在要部署的版本新舊狀況後, 再進行更新呢? 因為 ocx 在 build 時, 可以放入版本資訊, 例如 1.0.0.0, 其中 4個代碼分別為:

major.minor.build.revision

分類
TatterTools

奇怪的字型Dotum

之前發現到 \ (反斜線) 會出現 W 的字樣出現, 很奇怪, 於是就開始找原因, 後來發現原來只是 css 的字型問題, 利用 firefox 的 webdeveloper 工具, 很快地找到字型的元兇, 就是 Dotum 這個字型, 很奇怪, 他的反斜線會出現 W 由於 Tattertools_skyline_ko 及發表日誌使用的預設字型為 Dotum , 所以都會有這個問題, 只要修改一下就正常囉.

Tattertools_skyline_ko 是修改他的 css 即可, 而發現日誌的編輯器, 則是修改 script\editor.js 的第87行:

this.contentDocument.write(“body { font: 12px/1.5 Verdana, AppleGothic, Sans-serif, Dotum; background-color: #fff;}”);

他是用 javascript 來寫內嵌的 css, 如此一來就不會有這個問題囉…

分類
TatterTools

TT引用傳送帶的user agent

剛寫好一篇文章, 要將文章引用回去朋友的 blog “偉的1978部落格”, 因為他之前受 trackback 攻擊之苦, 所以正在找方法處理, 詳情請參閱: http://jin.tw/jin/291, 由於他會 check user agent, 結果造成我要 trackback 時發生失敗的回應, 於是我就再找看看 tt 的 trackback 機制是不是有這個問題, 結果查到 component 下的 Eolin.PHP.HTTPRequest.php 檔內的第 40 行, 就是送 user agent 而且是 Mozilla 如下, @@”

fwrite($socket, “User-Agent: Mozilla/4.0 (compatible; Eolin)\r\n”);

為了要引用成功, 於是我先將該行 mark 起來, 就成功地送出引用通知… 但, 朋友可能頭又要開始痛了, 因為 tt 預設的引用通知是會帶 user agent 的….

分類
TatterTools

TT時間不對

其實發現tt時間不對也不是現在才發現, 只是一直沒去查問題, 在沒有追蹤code的狀況下, 想說先看看別人架tt內文章的時間對不對來確認一下, 先到朋友 “偉的1978部落格” 看一下, 結果原本想先貼一篇comment後再看時間, 想說不要找最新的文章貼, 隨手點一篇舊文章, 說來還真巧, 隨便一點, 就點到他也發現時間不對的這篇文章, 文章連結: http://jin.tw/jin/288 還真不是普通巧, 莫非是天意…

不過看了朋友的解決方法, 很直接也很乾脆, 就是不要看 OS 的變數, 這也 OK, 但我還是想找原因, 怎麼會 $_ENV[‘OS’] 變數會沒有值呢? 先用 phpinfo() 測一下, 確定有值後, 再測其他的 environment variables, 結果都沒有值, @@”

所以就想找找原因, 找了老半天, 終於找到了, 原來在 php 裡預設的 variables_order = “GPCS” 也就是 $_GET, $_POST, $_COOKIE, $_SERVER 都是有的, 但 $_ENV 就是預設沒有, 是 performance 考量, 所以沒有 enable $_ENV, 建議用 getenv() 方式來取得環境變數, 接下來就是兩條路可以走, 一為將 variables_order = “GPCSE” , 另一就是將 tt 的 code 由 $_ENV[‘OS’] 修改為 getenv(‘OS’) 這樣就好了, 還好存在 db 的時間資料都是對的, 就是時區問題而已啦….