分類
程式技術

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

分類
Database

SQL Server自動備份通用方式(script)

新增一個資料庫, 第一件事要做的就是備份一次資料庫檔案.

偶而朋友發生SQL Server資料庫檔案故障的問題, 第一件事我會問有沒有做過備份, 其實也算是做最壞的打算, 利用 transaction log 配合之前的 database backup 應該可以 restore 大部分的資料, 但有可能連一次備份都沒做過的狀況下, 很有可能會發生資料庫整個救不回來的狀況. 所以安裝完資料庫後, 第一件事一定是要做好備份的規劃及策略.

這裡提供的方式, 是最懶人的方式, 就是利用 script 進行該資料庫的所有使用者資料庫備份, 利用查詢出 sysdatabases 中的非系統資料庫 (dbid > 4) 的備份, 指令如下:

分類
Javascript

Regular Expression查黃金門號

這個標題會不會太有趣了一點, 哈!

其實是要介紹 regulare expression 的量詞及參考語法, 我們假設要尋找黃金門號(其實也沒有那麼黃金啦), 例如: 0911213252 (0911213252) 這樣的 pattern, 如何利用 regular expression 來尋找呢? 我們這裡就會用到量詞及參考:

前方的 0911 為 4個數字, 所以直接用 [0-9]{4} , 這裡的 {4} 就代表著一定就是跳過4個數字
第一個不定關鍵字 ([0-9]) , 由於不寫個數, 就代表了一個數字, 而這裡用 ( ) 代表著一個比對的字元之後會用到
接下來就固定 2個數字, 所以用 [0-9]{2}
再接下來就是第一個參考囉, 也就是參考第 2點的關鍵字, 這裡用 \1 來代表

分類
Javascript

Regular Expression在Javscript下的兩種作法

今天要幫朋友做一個解析 javascript 字串的範例, 其實硬 parse 也是很簡單, 但還是想用更好的方法來進行, 於是利用了 javascript 的 Regular Expression 來做 parse 的行為.

在 javascript 中, 使用 Regular Expression 的方式有兩種, 一種是利用 new RegExp , 一種是直接用 perl 的那種語法 /xxxxx/ 的方式, 我們來看看怎麼做吧:

題目是將網址列中的某一參數取出來, 例如 param 這個參數,
http://host/j.htm?a=1&param=data&b=2
其中的 param 參數的值為 data, 利用 Regular Expression 的取出方式如下:

var re = new RegExp("param=([a-z]+)");
var m = re.exec(window.location);
if(m) alert(m[1]);

利用了比對字串 param=([a-z]+) 來將 param 的參數值取出, 其中的 m 內容將會是 [0] 為整個 Regular Expression 的字串, [1] 會是第一個取出的值, 若有多個比對的 () 小括號, 就放到 [2], [3]… 以此類推.

這樣的執行結果就會取出 “data” 這個值.

gmail支援線上播放powerpoint?!

今天在 Jan’s Tech Blog 看到了這篇: Gmail Slideshow 得知原來在 gmail 功能又增添了 power point 線上播放功能, 於是將上一篇: 方便好用的簡報分享網站 中的簡報檔寄到 gmail 信箱來看看, 發現並沒有這項功能:

推測可能是語系版本的關係, 所以沒有線上播放功能, 於是進入設定修改了一下語系為英語後, 就得到了這項功能:

原來是英文版本才有的耶, 趕緊來用看看有沒有什麼特殊好用之處, 原來他也是用 flash 播放, 而且功能還不錯用哦(一樣動畫是不會有效果的, 但中文是無法顯示的):

從上圖得知, 投影片本身的中文無法顯示, 但右上角的投影片標題是正常的, 可能是 flash 轉檔程式目前不支援的關係, 但網頁本身是支援中文, 所以標題正常.

另外我們看看右鍵功能表, 有自動播放功能, 而且可以設定播放速度還蠻不錯的, 看起來這個也能將簡報變得更可攜, 只要中文能顯示的話, 對於常要做簡報的朋友們, 應該有很大的幫助.

再來看看用 FireFox 看到的 Network Monitoring 下來的一些資訊, 一樣是用 xml 做為 meta data, 內容如下:

<?xml version='1.0' encoding='UTF-8'?>  
<slides urltemplate='http://mail.google.com/mail/?attscl=210ff3b9bf850856&amp;name=__filename__&amp;attid=0.1&amp;disp=attsc&amp;view=att&amp;th=1133a7e3120affff' origurl='/mail/?attid=0.1&amp;disp=attd&amp;view=att&amp;th=1133a7e3120affff'>  
<slide><title>中文投影片</title><file>0.swf</file></slide>  
<slide><title>Page1</title><file>1.swf</file></slide>  
<slide><title>Page2</title><file>2.swf</file></slide>  
</slides>

應該也能很容易理解吧!

分類
Blog服務

方便好用的簡報分享網站

今天在找資料時, 發現了一個很方便的線上簡報分享網站: www.slideshare.net , 主要是將簡報檔轉成為 swf, 然後透過 web browser 進行分享或直接做簡報使用.

支援的檔案有: ppt, pps, pdf, odp 一共 4 種, 相當實用方便, 上傳後播放的效果也很好, 非常適合用來做簡報的分享及做簡報使用.

使用中文也都沒什麼問題, 不過在個人頁上的投影片標題部分, 居然有一些問題, 很奇怪, 因為是 utf-8 的編碼, 照理說應該不會有這樣的問題, 不過在個人編輯後台及該簡報的播放頁又都很正常顯示, 不知是哪裡有一些問題, 畫面如下:

1. 怪怪的 ? 號:

2. 在播放頁的標題就很正常:

3. 中文內容也都很有支援, 不過不支援 power point 的動畫效果, 將測試的簡報利用它提供的嵌入語法展示一下:

4. 連回原始網站時, 就可以利用右下角的 full screen 放大至全畫面, 很適合做簡報用, 而且因為是 flash 的向量檔, 所以放大縮小不失真, 效果還真不錯!

分類
系統技術

apache加掛壓縮模組deflate/gzip

在阿駕零零壹站上看到這篇: [Apache] 壓縮你的網頁 – mod_deflate/mod_gzip、ob_gzhandler、zlib, 覺得效果不錯, 試著進行調整自己的主機, 加入這項功能.

由於 apache2 有自帶 mod_deflate 模組, 所以設定起來很快也很方便, 只要設定一下 httpd.conf:

LoadModule deflate_module modules/mod_deflate.so

將 # 拿到, 並加上

<IfModule mod_deflate.c>
  DeflateCompressionLevel 6
  AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
  AddOutputFilter DEFLATE html htm xml php css js
</IfModule>

並重啟一下服務即可順利完成.

但由於本站使用的是 apache 1.3x, 所以要麻煩一點, 配合的模組是 mod_gzip, 這個版本已經很久了, 可以先到 http://sourceforge.net/projects/mod-gzip/ 這裡進行下載.

若是 windows 下使用 dll 那組, linux/bsd則用 so 那組, 將檔案複製到 apache/modules 下, 設置 httpd.conf 檔案:

分類
Blog服務

getclicky安裝使用狀況

前一陣子有網友介紹一個含有user action 的分析服務, 將這一陣子的使用狀況整理一下:
在流量不高的網站是免費使用的, 引述內容:

How much does it cost?

  • Basic – Free, up to 3 sites, up to 1,000 average daily page views per site. Limited feature set.
  • Blogger – $2.99/month or $19.99/year. Up to 3 sites and 10,000 average daily page views total (between all sites). Includes extra features like RSS feeds, Spy, outbound link tracking, download tracking, IP tagging, IP filtering, and more.
  • Pro / Small business – $5.99/month or $49.99/year. Up to 10 sites and 50,000 average daily page views total. Includes all features from ‘Blogger’ plan, plus custom data tracking (usernames, etc), SSL support, API access (coming soon) and data export (coming soon).

具體的功能, 最主要的是能分析使用者的行為, 不過就管理介面來看, 他是依使用者的 ip 來判定使用者的, 而使用者的 link-in, link-out 資訊都很清楚, 而每個使用者的行為也都有依時間記錄下來. 而對於使用者的行為時間點都有記錄, 感覺很真實, 而且資料也都相當即時, 大約幾分鐘前的資料就會統計出來.

clicky 強調的是”行為”, 是從一種微觀的角度去看, 和一般從巨觀角度去看的網站分析工具來比較的話, 他有著一種很好玩的用戶行為資訊. 總之, 可以更近距離看到使用者, 這個是這個網站分析工具的重點.

http://getclicky.com/