今天由 trackback 發現有個 google 的 blog search, 於是訪問了一下, 原來還在 beta 階段的 google blog search, 給大家參考看看囉:
看了一下他的常見問題, 其中有項:
哪些網誌包含在網誌搜尋中?
「網誌搜尋」的目標是納入每一個發佈網站資訊提供 (RSS 或 Atom) 的網誌, 而不限於 Blogger 網誌或任何其他服務提供的網誌。
所以應該是由 rss 或 atom 的結果為 google blog search 的目標囉!
今天由 trackback 發現有個 google 的 blog search, 於是訪問了一下, 原來還在 beta 階段的 google blog search, 給大家參考看看囉:
看了一下他的常見問題, 其中有項:
哪些網誌包含在網誌搜尋中?
「網誌搜尋」的目標是納入每一個發佈網站資訊提供 (RSS 或 Atom) 的網誌, 而不限於 Blogger 網誌或任何其他服務提供的網誌。
所以應該是由 rss 或 atom 的結果為 google blog search 的目標囉!
今天在處理一個單純的 popup window (利用 window.open) 的子視窗, 在子視窗內進行 window.opener 的函數調用, 一般的狀況下, 都在同一網站(列如都在 www.foo.com)下沒有 cross domain 的問題, 但若是在兩個不同 domain 時(例如 www.foo.com 及 www.foo2.com), 就會有 cross domain 問題. 這個其實是一個單純的 security 問題.
不過若是今天是在同一家公司內的 cross domain, 例如 www1.foo.com 及 www2.foo.com 兩個 domain 下要執行這樣 cross domain 時, 是否能解決呢? 答案是肯定的, 其實和 cookie 域名共用設定方式相同, 上級域名共用的狀況下, 可以進行 document.domain 的設定以達成此項目的.
我們可以分別在 page1 在 www1.foo.com 及 page2 在 www2.foo.com 的網頁內 javascript 要執行 cross domain 指令前先執行
document.domain = "foo.com";
再繼續後續的程式碼即可, 這樣就不會有 cross domain 的問題囉.
不過也是有一些限制, 就是必須是在同樣的上級域名下, 才能使用, 而且也無法在 www1.foo.com 上將 document.domain 設定為 foo2.com 這樣的 domain, 這個原理其實和 cookie 的 domain 原理是相同的.
參考資料:
http://www.lhelper.org/tech/communicate_between_domains.html
http://www.cnblogs.com/xiaozhang/archive/2006/07/27/461306.html
http://www.mozilla.org/projects/security/components/same-origin.html
http://msdn2.microsoft.com/en-us/library/ms533028.aspx
資料庫中的 table, 大家都知道 primary key對 table的效能影響很大, 沒有主鍵的 table, 對於一般在程式實作時會有一定的困難, (某些狀況下例外, 例如 log), 尤其是在更新列時, 沒有 primary key時的時候, 效能根本是很糟糕的, 更危險的是可能會有資料本身邏輯上的問題. 今天我們不是來探討 primary key 的重要性, 而是找出資料庫中, 沒有 primary key 的 table.
其實很簡單地可以利用 sysobjects 這個系統表來查詢, 簡單描述如下, 我們利用 sysobjects 對自已對照, 並利用 parent_obj 這個欄位來串接起來自已對應自己的查詢, sysobjects 內有 table, view, primary key (index), 等資訊, 而我們就利用這樣的方式來進行查詢, 整理好的查詢如下:
大多數的 asp 應用程式若是在 utf-8 模式下開發, 前面多會有這麼一行:
<%@LANGUAGE=”VBSCRIPT” CODEPAGE=”65001″%>
然而有個很麻煩的事是在處理判定 BIG5 編碼的中文字. 在正常的狀況下, 應該不會用到這樣的功能, 因為無論是 BIG5 或非 BIG5 的中文字都是可以在 UTF-8 的環境下良好並存的, 但若是和一些舊的程式或其他異質環境介接, 就會遇到這種問題, 解決的方式是利用 asp 的 codepage 來轉換內碼後判定即可. 方式如下:
Function IsBig5(strChar) ' check A440~C67E 常用字, C940~F9D5 次常用字 session.codepage="950" Dim lngAsc lngAsc = Asc(strChar) IsBig5 = (lngAsc >= -23488 And lngAsc <= -14722) If Not IsBig5 Then IsBig5 = (lngAsc >= -14016 And lngAsc <= -1579) session.codepage="65001" End Function
今天在處理一個 odbc 建立在 x64 (64bit) server 2003 上的狀況, 狀況十分奇妙, 一般我們在設定 odbc 時, 是直接使用 [系統管理工具] 裡的 odbc 來進行設置, 當我設置好了之後, 有趣的事發生了, 居然透過 odbc 連接 db 的程式有個這樣的 exception:
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
如此一來設置好的 odbc 就形同虛設, 查了半天也查不出原因, 後來在 google 上找到一篇 citrix 的 kb (link) 試了一下, 居然就好了, 可以找得到了, 仔細檢查一下原因, 整理如下:
在 x64 內透過 ui 建立的 odbc 是 64bit 的 odbc, 而原來執行的程式若是 32bit 的話, 是看不到這組 odbc 的, 也就是說 odbc 也是有區分 64bit / 32bit 的. 如何判斷原來 ui 上的 odbc 是 64bit 的呢, 我們看一下畫面截圖:
剛在逛博客來時, 不小心發現了這個好玩的東東, 手機鏡頭, 如同一般數位相機, 這種鏡頭是外接在手機上面的, 看了一下, 其實價格不貴, 而且又是 kenko 的, 十分有趣, 在這裡介紹給大家看看囉!
這是廣角鏡:
https://addons.books.com.tw/G/N00/4/N000021044.jpg
可以做出這樣的效果:
http://219.84.164.83/G/CD/item/Accessory/Kenko/MPL-WA/3.gif
另外有偏光鏡, 近攝鏡, 側拍鏡, 等好玩的鏡頭, 其中還有一個三菱鏡很特別:
https://addons.books.com.tw/G/N00/1/N000020931.jpg
可以拍出這樣的特效耶:
http://219.84.164.83/G/CD/item/Accessory/Kenko/MPL-3MH/3.gif
真的是很特別哦!
其他有趣的鏡頭可以參考這頁: link
最近又剛好寫到 .net Cache 物件的功能了, 之前有介紹過 .net Cache 物件: ASP.NET Cache物件使用方式及應用, 接下來說明一下他的 Insert 方法和 Add 方法的不同.
由於在使用 Cache 時, 通常是先 check Cache 的資料是否存在後, 再進行資料的 Cache 寫入, 然而寫入的方式有兩種, 一種為 Insert , 一種為 Add , 其中差異不少, Insert 方法有幾種不同的排列組合外, 尚有可以一直覆寫的功能, 也就是說, 在利用相同的 key 去 Insert 時, 他會利用最新的資料去覆寫掉原來的資料, 而 Add 方法則是不會覆寫, 也就是 Add 會加不進去, 但也不會產生什麼錯誤, 呼叫完 Add 方法後, 若該 Cache 的 data 仍為有效, 則將該 Cache 的 object 傳回, 而且不異動(更新)原來的 Cache .
上面的述描對於一般的應用都沒太大影響, 反而是 Insert 方法的彈性比較大, 不過由於 Insert 方法會有覆寫的問題, 所以若是大量訪問的網問上, 應該效能會略遜於 Add 方法, 因為 Add 方法在 Cache 尚未過期前, 就不會再去異動 Cache 的資料了, 這點可以再測試看看!
微軟 MSDN 的資料:
Cache.Insert 方法
Cache.Add 方法
在windows平台下, 透過 vbs 我們可以很容易地撰寫一些 script 做為應用程式間的連結及整合, 雖然 vbs 的效能不好, 不過透過 vbs 進行整合各外部程式及連結資料庫的讀寫是十分方便容易的.
往往在呼叫外部程式時, 我們需要取得該程式的回傳結果, 並進一步解析(parse)以取得結果的內容來處理後續要進行的作業, 所以如何取得外部程式的執行結果, 就是本篇文章要介紹的內容.
在 vbs 中一般我們要執行外部程式並等待執行完成可以透過 WScript.Shell (WshShell) 物件的 Run 方法, 例如:
Set objShell = CreateObject("WScript.Shell") ret = objShell.Run("notepad",5,true) WScript.Echo "return " & ret Set objShell = Nothing
其中 5 只是以目前的位置及大小呈現, 後面的 true 則是等待執行的結果, 而 ret 就取得程式的執行結果 (error code)
但若是要取得像 ipconfig 這樣指令的結果 (輸出在 console 上的), 則必須使用 Exec 方法, 但 Exec 方法並沒有等待的呼叫方式, 所以必須自行利用該方法的回傳物件 WshScriptExec 的 Staus 屬性來進行判斷是否執行結束(0為執行中, 1為執行結束), 而我們所要取得程式的執行結果, 則是利用該 WshScriptExec 物件的 StdOut 來取得, 由於該 StdOut 為 TextStream, 所以我們若要整個取出, 就使用 ReadAll 方法即可, 程式如下:
Set objShell = CreateObject("WScript.Shell") Set objExec = objShell.Exec("ipconfig") Do While objExec.Status = 0 WScript.Sleep 100 Loop WScript.Echo objExec.StdOut.ReadAll Set objExec = Nothing Set objShell = Nothing
Run 方法參考: http://msdn2.microsoft.com/en-us/library/d5fk67ky.aspx
Exec 方法參考: http://msdn2.microsoft.com/en-us/library/ateytk4a.aspx
Alexa 一個全球網站統計的排行網站, 其統計的基礎是利用使用者安裝在 browser 上的 toolbar 進行統計的, 由於很久一來一直僅有 Internet Explorer 的版本, 對於日益增加的 FireFox 用戶無法統計的窘境也日益明顯.
我也是長期使用 FireFox 的用戶, 幾天前在拜訪 alexa 網站時, 發現已經提供了 Alexa Toolbar for FireFox 的版本 – Sparky, 相信對於 Alexa 的統計將會有更準確的效益, 由於 FireFox 的用戶在歐洲的用戶比例已相當高, 相信此舉對於 Alexa 的全球統計會有幫助的.
安裝的網址如下:
http://www.alexa.com/site/download
安裝好後, 和 IE 的版本不同, 它不是出現在上方的 toolbar 而是在右下角有個 alexa status bar:
http://client.alexa.com/download/images/ff_screenshot.jpg
有在使用 FireFox 而且又常在關心網站趨勢的使用者, 可以參考看看囉!
相關文章:
http://www.osxcn.com/firefox/alexa-toolbar-for-firefox.html
http://vbb.twftp.org/showthread.php?p=53958
http://syafrizal.com/zt/alexa-toolbar-for-firefox/
http://www.geteway.game.tw/phpbb/weblog_entry.php?e=26
wmv, wma 的判斷方式, 是利用這篇參考資料進行實作的:
http://www.microsoft.com/windows/windowsmedia/forpros/format/asfspec.aspx
裡面有一篇非常詳細的 asf 檔案格式的描述, 根據這篇的描述, 我們可以進行程式實作來判定 asf 及 wmv 和 wma, 主要的判定是利用 header 中的 stream type 來進行判斷的, 首先先讀出 asf 的格式檔頭, 讀出 guid 如下: (c#)
Guid guidASF_Header_Object = new Guid("75B22630-668E-11CF-A6D9-00AA0062CE6C"); Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(stream); Guid guidTemp; byte[] arrbyteGuid = new byte[guidSize]; arrbyteGuid = br.ReadBytes(guidSize); guidTemp = new Guid(arrbyteGuid); if (guidTemp == guidASF_Header_Object) // this file is asf format { // ..... }
上面確定為 asf format (可能是 wmv 也可能是 wma), 接下來再進行確認其內容是否有 audio 及 video 的狀況, 來判定應為 wmv 或 wma.
我們必須先找出 header object 為 ASF_Stream_Properties_Object 的內容為 ASF_Audio_Media 或 ASF_Video_Media 的狀況, 通常 wma 僅有 ASF_Audio_Media, 而 wmv 為 ASF_Audio_Media 及 ASF_Video_Media 都存在, 所以就繼續找出 stream 的 type 即可, 程式碼在此, 給大家研究看看, 節省大家在判定這些檔案的時間囉!
checkASF.zip