分類
Blog服務

google blog search網誌搜尋

今天由 trackback 發現有個 google 的 blog search, 於是訪問了一下, 原來還在 beta 階段的 google blog search, 給大家參考看看囉:

看了一下他的常見問題, 其中有項:

哪些網誌包含在網誌搜尋中?

「網誌搜尋」的目標是納入每一個發佈網站資訊提供 (RSS 或 Atom) 的網誌, 而不限於 Blogger 網誌或任何其他服務提供的網誌。

所以應該是由 rss 或 atom 的結果為 google blog search 的目標囉!

連結為: http://www.google.com/blogsearch?hl=zh-TW

分類
Javascript

Javascript的同一父網域下的crossdomain問題

今天在處理一個單純的 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

分類
Database

查詢SQL Server中Table是否有Primary Key

資料庫中的 table, 大家都知道 primary key對 table的效能影響很大, 沒有主鍵的 table, 對於一般在程式實作時會有一定的困難, (某些狀況下例外, 例如 log), 尤其是在更新列時, 沒有 primary key時的時候, 效能根本是很糟糕的, 更危險的是可能會有資料本身邏輯上的問題. 今天我們不是來探討 primary key 的重要性, 而是找出資料庫中, 沒有 primary key 的 table.

其實很簡單地可以利用 sysobjects 這個系統表來查詢, 簡單描述如下, 我們利用 sysobjects 對自已對照, 並利用 parent_obj 這個欄位來串接起來自已對應自己的查詢, sysobjects 內有 table, view, primary key (index), 等資訊, 而我們就利用這樣的方式來進行查詢, 整理好的查詢如下:

分類
懶得分類

如何在ASP內判定BIG5碼中文字

大多數的 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
分類
Database

x64下odbc建立問題

今天在處理一個 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

.net Cache物件的Add及Insert不同

最近又剛好寫到 .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 方法

分類
程式技術

VBS中執行外部程式取得Console上的結果

在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提供了FireFox的toolbar-Sparky

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

分類
.net

如何判斷WMV, WMA, ASF的檔案

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