分類
.net

StringDictionary強制型別字字典class

在 .NET 裡有個內建的 Hashtable (System.Collections.Hashtable) 可供做 Key/Value Pair 使用, 不過若是要再增加效能, 可以考慮使用 StringDictionary 強制型別字串對照字典, 名稱空間是在 System.Collections.Specilized.StringDictionary . 使用強制型別可以有效提升效能, 原本的 Hashtable 是可以存放 object / object 的方式, 當然也可以存放 string / string , 但總是多了 object 與 string 間的轉換, 而且也容易放錯資料進去, 若是有強制型別的 StringDictionary class 來存放這樣的資料, 在型態上及在效能上都能有效提升.

該 StringDictionary 的使用方式請參考: MSDN Link

其他相關的資料可以參考 Hashtable, 泛型的 Dictionary, 泛型的 KeyValuePair,

其中泛型的 Dictionary 就是利用 Template 進行 Dictionary 的宣告, 讓 Dictionay 的存放資料的型別為指定的型別, 例如:

Dictionary<string, string> dicData = new Dictionary<string, string>();

dicData.Add("a","apple");
dicData.Add("b","banana");
分類
Database

利用CTE將分頁資料取出-Stored Procedure篇

之前在 用CTE來取出指定筆數 – SQL2005 這篇介紹了如何利用 CTE 來取出指定的筆數, 這篇文章將進一步實作一支 stored procedure 做為方便分頁的方式.

主要是為了方便取出指定的筆數來實作的, 所以傳入的參數很單純, 就是原本的查詢指令, 將查詢及排序條件分開, 並指定開始的索引值和結束的索引值即可, 建立的程式碼如下:

create proc sp_getRecordByCTE 
@sqlcmd nvarchar(4000),
@ordercmd nvarchar(1000),
@startindex int,
@endindex int
as
declare @mycmd nvarchar(4000)
select @mycmd = '
with myctequery as (
select row_number() over ( ' + @ordercmd + ' ) 
as CTESN, '+replace(@sqlcmd,'select ',' ')+' )
select * from myctequery 
where CTESN between ' + convert(nvarchar,@startindex) + ' and '+convert(nvarchar,@endindex) 
exec sp_executesql @mycmd

其中比較特別的是為了方便輸入起見, 只要將原來查詢指令的非排序部分和排序部分分開即可, 簡單範列如下:

原來的查詢是:

select a.orderid, a.orderdate, b.custname, b.custaddr from orders a inner join cust b on a.ordercustid = b.custid order by a.orderdate desc

利用上面的 stored procedure 做指定分頁的筆數若為 51~100 (每頁50筆的第二頁), 先將指令區分為紅色查詢及藍色排序, 並且如下輸入給 sp_getRecordByCTE:

exec sp_getRecordByCTE
'select a.orderid, a.orderdate, b.custname, b.custaddr from orders a inner join cust b on a.ordercustid = b.custid',
'order by a.orderdate desc',
51,100

便能將指定的分頁第二頁(51~100)這些資料取出, 這樣和使用 ADO 分頁比較, 不僅可以降低 network IO 外, 更能在複雜查詢時提升效能, 減少不必要的資源浪費, 對於網頁分頁使用時有很大的幫助. 不過目前尚有一個問題無法解決, 就是總筆數這個部分, 因為利用 ADO 查詢時, 可以取得總筆數這個資料, 利用這個 stored procedure sp_getRecordByCTE 將無法取得這個資訊, 看是否有沒有什麼好方法來做這個資料的取得及回傳, 若各位有什麼好建議也歡迎給我建議!

希望這個 stored procedure 對各位能有所幫助.

繼續閱讀:

分類
好用軟體

U3.com隨身碟軟體

看了 monday 購物的廣告, 發現有一個還蠻有趣的軟體, 是 sandisk 隨身碟附贈的 u3, 可以到 www.u3.com 看看. 雖然這種軟體之前也有出過類似的, 不過這次考量得更完整, 除了原來隨身碟就有的功能外, 還可以將檔案同步, 安裝軟體(至隨身碟上), 記錄工作環境(方便於其他人的電腦上執行自己的工作), 這樣方便的工具, 令人很想試看看, 查了一下最便宜的就是這支了, “SanDisk New Cruzer Micro 1GB 新麥可碟”, 才299一支 (連結), 該軟體的介紹如下:

SanDisk 以全新的設計風格融入U3智慧型新麥克碟中,首次以U3 Launchpad獨特行動平臺概念,輕鬆使用內建U3軟體:CruzerSync synchronization tool U 盤同步化程序/ SignupShield password manager密碼管理員/SKYPE voice over IP software SKYPE軟體/AVAST virus scan 掃毒軟體等。並且方便攜帶個人資料和在www.u3.com下載的U3應用程式,將會顛覆以往對於隨身碟只能當隨身聽或是行動相簿等等的附加功能印象。

這種將附加價值大幅提高的軟體還真該人想試看看, 參考下面兩則影片, 相信能更了解:
廣告, 使用介紹. 其實不難想像這類的應用, 若是能整合的完整, 相信對於使用者來說會是相當方便的, 雖然我們也很清楚未來工具會慢慢地往線上應用發展, 利用瀏覽器來操作, 但不可避免的仍有些相當需要資源的軟體仍需要以桌面應用程式方式操作, 這樣的商品整合應用, 將會有相當大的好處, 再看看 u3 的軟體整理 (連結), 應該會覺得這個軟體應該還有蠻大的發揮空間, 再加上 u3 也提供了給廠商開發軟體使用的 api, 這樣對於要在 u3 上發展應用程式的軟體供應商也給了一個方便的管道, 形成了一種良性的發展.

http://www.3u.com/images/smart/launchpad2.jpg

有興趣的朋友可以透過此 連結 購買, 或下方的推薦商品進行購買. 若需要其他容量的也可以透過下面連結購買:

Sandisk Cruzer Contour 4GB 旗鑑級隨身碟 Sandisk Cruzer Contour 8GB 旗鑑級隨身碟
SanDisk New Cruzer Micro 4GB 新麥可碟 SanDisk New Cruzer Micro 2GB 新麥可碟

相關文章:
http://www.everythingusb.com/u3.html
http://slammerb.spaces.live.com/Blog/cns!7C4C09C802323BAF!202.entry

[2009/1/5 1:30]
最新 monday 有 16GB 版的促銷, 請參考:
SanDisk New Cruzer Micro 16GB 新麥可碟

分類
.net

C#判定BIG5字碼的方式

繼上一篇 如何在ASP內判定BIG5碼中文字 之後, 再來整理一下在 ASP.NET C# 中判定 BIG5 碼的方式, 其實方式一樣很單純, 不過不需要利用到轉碼的 code page, 只需要利用 System.Text.Encoding 即可順利判讀, 程式碼如下:

Boolean IsBig5(string strOne)
{
    Boolean bIsBig5 = false;
    byte[] ByteArrayBig5 = System.Text.Encoding.GetEncoding("big5").GetBytes(strOne);
    if (ByteArrayBig5.Length == 2)
    {

        //check A440~C67E 常用字, C940~F9D5 次常用字 

        //42048~50814, 51520~63957            
         
        int iCode = ByteArrayBig5[0] * 256 + ByteArrayBig5[1];
        if ((iCode >= 42048 && iCode <= 50814) || (iCode >= 51520 && iCode <= 63957))
        {
            // chinese char big5 
            bIsBig5 = true;
        }
    }
    return bIsBig5;      
}

利用了 Encoding 的 GetBytes 方式, 取出在 strOne 中的一個字元, 並判定是否為 2個 byte 後, 一樣利用了原來的判定方式, 若落在對應的區間內, 就可以判定為 BIG5 字元集內的字了!

google documents presentation不錯的簡報功能

google 線上 documents 是一個類似 office 的功能, 而又全部在線上完成的跨平台 office 軟體, 簡報功能強化了線上發行及線上直接做”簡報”, 這個功能可以很方便地讓使用者在線上製作簡報後, 再進行發佈, 並在線上進行簡報.

發佈後的簡報文件, 可以透過單一連結進行發佈給其他人觀看並加入簡報過程, 相信這將會是十分方便的功能, 製作了一個測試的簡報, 連結如下:

http://docs.google.com/Present?docid=dhcdp9kg_1hdw9xt

當多人同時進入時, 可以同時利用 ajax 的聊天室介面進行簡報, 並且可以由簡報者取得簡報控制權進行簡報, 不過由於沒有聲音, 所以簡報進行中僅能以文字方式進行, 不太像一般的簡報, 不過這樣方便的功能, 看起來加入語音可能是遲早的事了.

雖然功能有些限制, 不過這樣線上的免費文件及簡報編輯器和線上發佈簡報的功能, 真的是很方便呢!

ps. 另外也將之前文章: gmail支援線上播放powerpoint?! 附的 1.ppt 上傳上來並發佈試看看:
http://docs.google.com/Present?id=dhcdp9kg_3fczsrq

相關閱讀:
gmail支援線上播放powerpoint?!

分類
手機大未來

wifly推出mobile設備低月租專案

wifly 算是密度相當高的 wifi 服務, 不過一直居高不下的費用, 令人望而卻步, 一日99, 一個月399的費率, 根本就是太高了, 再加上品質真的沒有想像中的好, 感覺付了貴貴的費用, 但又沒有好品質的服務, 更讓人不會想去用.

最近發現他提供了mobile設備低月租方案, 似乎可以試試了, 看起來對於費率先降低試行在這類的行動設備上, 拜行動設備的市佔率日漸增多, 能降低月費也算是不錯的呢. 對於行動設備的定義引述如下:

對象︰使用PDA、手機、iPod Touch、iPhone、PSP搭配WIFLY無線上網用戶
手機適用機種︰支援Windows Mobile手機、Nokia N95、N81、N80、E65、E61、Sony P1i
注意︰參加本專案無法使用筆記型電腦或其他上述以外的設備上網。

再找時間試看看他的效果如何囉, 給大家參考看看.

PDA、手機Wi-Fi無線上網特惠專案
WIFLY 首頁
相關文章:
WiFi熱點到底熱不熱
中華電信調降公共WLAN連網費用

GMail空間暴長

有在用 GMail 的人, 最近應該發現他的空間計數器的數字變多了很多, 記得不久前才 2800MB左右, 上週大約還在 3400MB, 那時候我就覺得變大了很多, 結果今天看又到了 4300MB 左右, 變大的速度真是驚人啊, 對於我們這些用戶來說真的是太棒了呢.

不過最近似乎沒有什麼特別的新聞在討論這個資訊, 下面是一些相關的資料.
Gmail’s Storage Increases, 6 GB in January 2008

相關新聞:
Microsoft Goes to 1GB, Google Ups Gmail to 4GB
Google信守诺言 Gmail空间计数器一夜增加130MB
Gmail空间计数器一夜增加130MB

Youtube推出繁體中文介面(tw)版

隨著 youtube 推出繁體中文版, 相信會有更多人台灣人使用 youtube, 不過其實 youtube 的操作並不複雜, 再加上多是看 video 的內容, 相信即使沒有繁體中文介面也不致於影響對英文看不懂的 user, 但對於台灣的用戶來說應該是一大福音.

不過還是不怎麼容易上傳成功及有時觀賞會看不到的問題還是要加強改善才是, 身為世界第一大視頻分享網站, 推出對繁體中文的版本, 真的是要給他鼓勵一下囉, 表示對繁中用戶的重視.

今天放在 tw 首頁上的 video (台灣讚啦):

真的台灣讚啦!!

相關新聞:
http://www.libertytimes.com.tw/2007/new/oct/14/today-e2.htm
http://blog.chinatimes.com/blognews/archive/2007/10/15/207304.html
http://news.sina.com.tw/tech/sinacn/cn/2007-10-18/113238199671.shtml

國內提供相關服務的網站:
http://www.im.tv/vlog (IMTV)
http://www.wretch.cc/video/ (無名小站)
http://mymedia.yam.com/ (天空)
http://vlog.xuite.net/ (hinet xuite)

分類
好用軟體

Live HTTP headers for firefox

之前介紹過 firebug 新的 network monitoring 功能(https://diary.tw/archives/485), 最近發現有時在追蹤 cache data 時, 不是很方便, 因為要在前方的 + 號展開, 而且比較麻煩的是要 check http status code 比較不方便, 他並沒有直接秀出狀態, 而是以顏色的方式區分, 於是再找找有沒有更單純的 headers 檢視功能, 找到了一個 Live HTTP Headers for firefox 的方便 Add-ons.

於是下載安裝了 (link), 發現該功能雖然單純, 不過十分方便, 就只有 headers 的部分會顯示出來, 而且也可以以 sider bar的方式 dock 在 firefox 的左側, 對於要常常在查 http 效能及 cache 狀態的我, 感到十分方便.

真的是一個還蠻實用的 http headers 的觀察器.

PS. HTTPS 也都可以正常觀察 headers 的部分哦(因為 headers 本來就沒有加密啦!! 當然原來的 firebug 的 network monitoring也都可以啦, 只是操作上麻煩一點)

下面是他的呈現結果:

分類
程式技術

好炫的不用javascript程式判定browser方式

一般我們在判斷 client 的 browser 時, 是利用 javascript 取得 client browser 屬性, 若是不使用 javascript 的狀況下, 如何能做到呢? 可以利用 html hack trick 方式來達成, 這篇文章
http://wafful.org/~takesako/html20hacks/browser-detect2.html
介紹了這個方式:

<img

 /''src="firefox.gif"
 /""src="sleipnir_gecko.gif"
    "src="safari.gif"
   ""src="konqueror.gif"
 /src="ie.gif"
   src="opera.gif"
   src="lynx.gif"
>

只能說真的太神奇了, 利用了 browser 的解析方式, 來判定 browser 的型態, 這篇同樣利用類似的方法達成:
http://wafful.org/~takesako/html20hacks/browser-detect.html
不過 html 碼就不是可視字元囉.
利用這種方式來判定 browser 真的很有趣.

相關文章:
http://www.hedgerwow.com/360/dhtml/html-browser-detection.html