分類
懶得分類

好好玩的手機特效鏡

剛在逛博客來時, 不小心發現了這個好玩的東東, 手機鏡頭, 如同一般數位相機, 這種鏡頭是外接在手機上面的, 看了一下, 其實價格不貴, 而且又是 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物件的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

如何判斷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

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

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

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

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

Regular Expression查黃金門號

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

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

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

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 的向量檔, 所以放大縮小不失真, 效果還真不錯!