分類
Database

SQL Server 在資料庫中找出有 identity 的欄位及table

SQL Server 2005 中, 若想要找出所有有 identity 的欄位及 table , 可以利用系統表, sys.columns 及 sys.objects 來個來查詢.

其中的 sys.columns 的 is_identity 就可以判定該 column 是否是 identity 欄位. 所以在 SQL Server 2005 要判定這些 table 及欄位時, 可以使用以下查詢:

select o.name, c.name
from sys.columns c inner join sys.objects o 
on c.object_id=o.object_id 
where c.is_identity = 1 and o.type='U'

當然, 應該會有人問, 那 SQL Server 2000 怎麼辦呢? 因為 SQL Server 2000 並沒有像 SQL Server 2005 有 sys.columns , 而 sys.objects 還可以用 sysobjects 取代, 但麻煩的是那個在 sys.columns 裡的 is_identity 欄位, 要怎麼找出有 identity 的欄位呢? 可以利用 syscolumns 中的 status 欄位, 其中的 0x80 就是 identity 屬性, 詳情可以參考這篇: http://msdn.microsoft.com/en-us/library/aa260398(SQL.80).aspx 其中的 status 欄位.

根據這樣的資料, 我們就不難組合出 SQL Server 2000 查找出有 identity 欄位的 table 了, 如下:

select o.name, c.name
from syscolumns c inner join sysobjects o on c.id=o.id 
where c.status & 0x80 = 0x80 and o.type='U'

整理出來的結果就會是 table / column , 很方便大家能快速地將資料表及欄位含有 identity 屬性的部分找出來.

ps. sysobjects 中的 type=’U’ 是指 user table .

繼續閱讀:
syscolumns: http://msdn.microsoft.com/en-us/library/aa260398(SQL.80).aspx
sysobjects: http://msdn.microsoft.com/en-us/library/aa260447(SQL.80).aspx
SQL Server的Identity欄位使用/複製/重設: https://diary.tw/tim/65

google的搜尋時間區間參數as_qdr

在 google 搜尋資料很方便, 狂人這裡介紹了一篇如何做 “時間限定” 的搜尋: http://briian.com/?p=6205 可以將最近納入搜尋引擎的資料做更小區間的過濾.

我們來看看這個有趣的參數, as_qdr, 可以使用的區間資料欄位為 h, d, m, y 四種, 例如:

http://www.google.com/search?q=test&as_qdr=d

代表著要搜尋的字為 test , 而時間區間為 d 一日內, 也就是 24小時內, 理論上和以下等義:

http://www.google.com/search?q=test&as_qdr=h24

這些有趣的地方在於縮小化查詢內容區間(應該算是 google 納入搜尋內容的時間), 是很方便又有用的一個查詢條件, 要找一些時間敏感性的資料, 特別好用. 以下列出用法:

as_qdr=[時間單位][數量(無代表1)]

所以查6個月內就會是這樣:

http://www.google.com/search?q=test&as_qdr=m6

大家有興趣可以試看看囉.

繼續閱讀:
http://www.realestatewebmasters.com/showthread.php?t=18812
http://briian.com/?p=6205
http://www.google.com/support/forum/p/customsearch/thread?tid=1fe1ed3df656cb3b&hl=en
http://www.google.com/support/websearch/bin/answer.py?answer=35890

分類
手機大未來

Windows Mobile行動寶庫

這個是今晚收到的電子報, 其中的一個連結, Windows Mobile行動寶庫, 我第一個想到就是 iphone 的應用程式, 看起來有點互別苗頭的味道耶.

這個其實是很需要大力宣傳的, 基於手機作業系統也是一種應用平台來看, 微軟在這塊一定也是卯足了勁來拼, 我們看之前有 iphone 的成功案例, 再加上 google android 的來勢洶洶, 微軟的 Windows Mobile 有場硬仗要打.

所以週邊的應用軟體和許多好玩的小遊戲這時得要好好發揮作用, 好讓大家能在手機上好好應用還有娛樂. 例如我在 iphone 上最常玩的 fieldrunners 就是沒有 Windows Mobile 的版本, 還有許多不錯玩的小遊戲, 在 iphone 的 touch 操作下, 真的很好玩也很有趣. 所以其實 iphone 手機是一個很不錯的娛樂平台.

不過使用 Windows Mobile 我覺得也有很多好處, 無論是和 desktop 的 windows 同步, 管理, 許多好用的網路工具, 一些不太容易比得過 iphone 的遊戲, 其實還是很不錯用的. 不過 iphone 還有很強的 safari for iphone, 其實微軟也在下一個版本的瀏覽器上有了長足的改善. 這些應用程式真的足以左右使用者對於手機的使用習慣及採購決策. 而且更容易因為朋友及週圍的用家使用習慣來左右自己的想法. 有時反而會覺得應該挑一支適合自己習慣, 遠比功能華麗來得重要.

當然, 還有許多其他的手機應用平台, 也都有各自的應用領域及優勢, 不過對於終端使用來說, 到底是一支手機, 還是一支多功能隨身設備, 真的是因人而異了..

分類
Blog服務

Alexa改版囉

今天為了查一下 vimeo 的排行, 到 alexa 網站上去看了一下, 發現有蠻大幅的改版耶, 於是查了一下 google news, 只有簡體版的新聞有這個改版消息, 沒有繁體的, 連結如下:

http://news.google.com/news?ned=tw&hl=zh-TW&q=alexa+%E6%94%B9%E7%89%88

可能是台灣沒什麼人關心這個 alexa 網站吧. 不過我倒還蠻常用的說, 而且這次改版多加了一些功能進來哦, 原來就有的是 Traffic Rank, Reach, PageViews, 而這次改版完後, 新加入了 PageViews/User, Bounce Rate, Time on Site 三項數據, 整個介面如下: (以 vimeo.com 為例)

而且切換速度和呈現效果也很不錯耶, 不過他的 max 資料一樣是只有最近一年半而已, 沒有更久的, 這是在之前一次的調整(大約半年多前吧)就拿掉了, 所以沒辦法查更久的資料(當然是可以透過他們的付費api取得).

下方工具列一樣也有 compare to 方便做比較, 例如:

可以很清楚的做彼此間的比較, 方便查找時間點及分析作用.

根據官方 blog 上說明, 有這次改版的功能的介紹, 連結如下: http://awis.blogspot.com/2009/03/pardon-our-dust.html , 這次的提出功能中, 加入的新數據都是對於分析有很大的幫助的, 每個 user 的平均頁面數, 回彈率, 站上停留時間, 都是很好用的資料, 可供分析應用.

分類
Database

如何移動已存在的SQL Server 2005中的user database

有時候主機的硬碟空間不足或是因為要調整硬碟配置, 會動到資料庫的存放位置, 這裡有一篇 kb 在處理這個作業.

移動使用者資料庫

內容說明蠻詳細的, 我這裡簡單列出操作的方式:

1. 先找出該 db 的所有檔案, 利用以下指令(其中USERDB是假設的使用者資料庫名稱):

SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'USERDB')

(基本上至少會有兩個, 一個是放 data 的 mdf, 一個是放 log 的 ldf 檔案的所在位置)

2. 接下來將資料庫先離線:

ALTER DATABASE USERDB SET OFFLINE;

(可能會花一些時間)

3. 再來就是將資料庫的實體檔案搬移到指定位置, 這裡假設是 d:\sqldata\

分類
手機大未來

slideshare出mobile版本了

之前介紹的 slideshare 網站, https://diary.tw/archives/515 已經出了 mobile 版本囉, 雖然還是 beta, 不過可以可以用了呢, 而且也可以直接由 desktop 的 browser 去訪問. 網址在:

http://m.slideshare.com

這個功能其實也十分方便, 原來 slideshare 是將簡報放在網路上做分享, 現在再進一步放到手機上來分享, 這個的確十分有用, 可以在外面隨時看自己分享的簡報耶.

我們來看看手機上的長相:

雖然小, 不過也非常方便了呢, 給大家參考看看, 基本上, slideshare 是很有用的簡報分享網站, 再加上了手機上的瀏覽應用, 雖然字會小很多, 有時會看不清楚, 不過若是用於示意圖又或是圖片的分圖, 真的是再方便不過了..

分類
Javascript

jQuery traverse元件屬件

traverse 是程式寫作上一個還算蠻重要的 runtime information. 尤其在 web 上, jQuery 的概念整個就是建立在這樣概念上. 利用 selector 將要找的東西找出來, 再進行更動或讀取這樣的狀況.

現在利用一個小案例來說明這個 case. 我要找出頁面上所有有 onclick 屬性的 anchor, 並加以標註出來, 語法是這樣的:

$("a[onclick]").addClass("highlight1");

是的, 你沒看錯, 就是這樣一句而已. 這句語法的解釋是這樣的:

  1. $(“a”) 是找出所有的 anchor
  2. $(“a[onclick]”) 是找出所有的 anchor 而且有 onclick 屬性的
  3. addClass 就是加上一個 css class

就只是這樣而已. 我們來看看範例吧: http://sample.diary.tw/17/j1.html 其中的 button: [find anchor with onclick attr.] 按下後, 會將有 onclick 屬性的 anchor 用 highlight1 的 lightgreen 的背景色加上, 就很清楚了. 其中只有 f1(), f2() 會呈現出來效果, 而其他的 anchor 沒有下 onclick 屬性的, 都不會被影響.

接下來找出 anchor 的連結屬性, 開頭是 http://www 的, 這個也很有趣, 語法如下:

$("a[href^='http://www']").addClass("highlight2");

也是一樣, 一行搞定, 語法說明如下:

  1. $(“a[href^=’http://www’]”)是指 anchor 中, href 屬性開頭為 http://www 的.
  2. addClass 就是加上一個 css class

(在1.2版時, 還可以使用 @在 href 前, 也就是 @href^=’xxx’ 這樣, 不過在 1.2 已不推薦使用, 1.3 時已不支援了, 要特別注意 @ 這個符號囉)

一樣來看範例, http://sample.diary.tw/17/j1.html 其中的 button: [find anchor start with http://www] 按下後, 其中開頭為 http://www 的 anchor 會套用 lightblue 的背景色, 是不是很方便呢?

其中的 ^= 是開頭為, 而 $= 是結束為, 而 *= 是含有, 所以若是要找連結為 .pdf 結尾的, 可以使用:

$("a[href$='.pdf']")

再來就是談 traverse 的語法, 其實也很單純, 是利用 each 這個方法, 再利用匿名函數取得陣列代號, 就可以將符合條件的元素陣列逐一列舉出來, 如下:

var elements = $("a[href^='http://www']");
var message = "";
$(elements).each(function(e){
    message += elements[e].href+"\n";
});
alert(message);

程式碼說明如下:

  1. 先將符合條件的 objects 都放入 elements 陣列
  2. 再利用 each 方法, 配合匿名函數, 將 elements 陣列內的 object 的 href 屬性結合成產生的字串訊息
  3. 最後再將訊息秀出

參考範例: http://sample.diary.tw/17/j1.html 其中的 button: [traverse anchor start with http://www] 就會將所有開頭為 http://www 的 object 的 href 屬性 alert 出來囉.

相信對於使用 jQuery 的朋友們, 能更清楚整個運作的邏輯..

分類
.net

.net下enum列舉與string文字間的轉換

有時會用到這樣的功能, 就是列舉的名稱和列舉的值做轉換. 這個在 delphi 裡是利用 RTTI (Runtime Type Information)來達成, 在 .net 裡的作法也很單純, 利用 Enum 的 CLASS 方法(靜態方法)就可以做到了.

先來看看由 enum 轉回字串, 是使用 Enum.GetName 方法, 要傳入的是 enum 的 type 及該 enum object 即可, 程式碼如下:

public enum enumMyFruit  
{  
    Apple, Lemon, Orange  
}  
....  
enumMyFruit fruit1 = enumMyFruit.Apple;  
string result = Enum.GetName(fruit1.GetType(), fruit1);

再來是利用 string value 轉入 enum 的方法, 使用 Enum.Parse , 傳入一樣是 enum 的 type, 及傳入 string 的值, 最後有個參數是是否忽略區分大小寫的真值, 範例如下:

 public enum enumMyFruit  
{  
   Apple, Lemon, Orange  
}  
....  
enumMyFruit fruit1 =  Enum.Parse(typeof(enumMyFruit), "Apple", true);

其中關於第一個部分, 使用 Enum.GetName 其實可以直接用 fruit1.ToString() 就拿到了, 不過根據這篇文章: http://www.cnblogs.com/smalldust/archive/2007/02/27/384657.html 提到了, 效率不太一樣, 就我個人覺得, ToString() 還是少用吧, 用 GetName 還是比較正規一點, 再加上效率有差的話, 其實還是用 GetName 好.

後面利用 string 轉入 enum 則要注意一下, 若發生找不到的狀況時, 將會有 exception 發生, 這個是需要注意的, 因為本來就有可能會發生這個問題, 要處理好這個部分的程式碼囉.

參考資料:
http://snipplr.com/view/3585/enum-to-string-and-string-to-enum/
http://www.cnblogs.com/smalldust/archive/2007/02/27/384657.html

分類
FreeBSD/Linux

apache deny ip設定

想要將 apache 的站台, 拒絕讓某個(某群ip)存取的方式, 有幾個方法, 其中最單純最俱體的方式就是直接利用 <Directory></Directory> 這個 tag 中的限制存取來操作最為單純方便 (當然, 虛擬主機可不行, 可以直接利用 .htaccess 設定該層目錄的存取權限)

一般來設, 設定如下:

<Directory "/usr/home/website1">
  order deny,allow
</Directory>

這樣即可. 就是判斷 deny , 預設為 allow 的條件, 也就是所謂公開站台的設定, 若有要限制某些 ip 存取, 可以這樣下:

<Directory "/usr/home/website1">
  order deny,allow
  deny from 1.2.3.4
  deny from 11.22.33.
</Directory>

其中的 deny from 1.2.3.4 是限制某個單一 ip, 而 deny from 11.22.33. 是指 11.22.33.* 都是拒絕存取的, 如此一來, 便能有效管理不想讓某些 ip (例如爬蟲類或是一些吃資源的 ip, 又或是攻擊的 ip)訪問做好限制.

不過發生了一個有趣的狀況, 也就是之前設了, 發現沒有用, 在多次交叉比對檢查後, 發現是這個原因, 就是在 <VirtualHost> 內的 DocumentRoot 指定為 /home/website1 而在 <Directory> 內的目錄指向是 /usr/home/website1 , 這樣一來, apache 在存取該 website1 的檔案時, 是走 /home/website1 下的檔案, 雖然和 /usr/home/website1 一樣, 不過對 apache 來說卻是不同, 這個要特別注意才行, 否則可能會有設定好的 <Directory> 的限制 ip, 但實際上沒有作用, 原因就有可能發生在這裡了.

又或反過來說, 設定的路徑一定要一致, 而且儘量用完整路徑, 不要用簡化的 link 路徑指向檔案, 也比較容易除錯一些. 所以原則上是這樣的:

<VirtualHost *:80>
  ServerName test.diary.tw
  Document /usr/home/www/test
.....
</VirtualHost>

<Directory "/usr/home/www/test">
  order deny,allow
  deny from 1.2.3.4
</Directory>

這樣就 ok 啦, 千萬要注意紅字部分要一致的這件事, 否則可能設了沒有作用, 原因就在這裡了..

另外補充一下, 若是這種方式限制存取的話, client 會拿到 403 的存取失敗代碼.

Google坐穩Alexa第一名了

因為我用的 Firefox 有安裝 sparky, 就是 alexa toolbar for firefox (請參考這篇), 所以每天大概都會瞄一下各網站的排行狀況, 今天收 gmail 時, 偶而發現 google.com 已躍居 alexa 排行榜第一名了.

長久以來, 排行榜一直是 yahoo.com 盤據著第一名的寶座, 也因為他使用的域名政策是使用 XX.yahoo.com 的方式, 使得以尾域名統計為基礎的 alexa 長久以來一直是 yahoo 第一名, 而 google.com 則是因地有不同的尾域名, (不過 login 時及一些服務則是回到 google.com), 所以一直不敵 yahoo, 但是排行榜前幾名一樣有 google.com, google.co.in, google.de, google.fr 等等, 當然 yahoo 也是有 yahoo.co.jp 這樣的狀況, 不過一般來說, 比較時仍會覺得 google 其實已經實值超過 yahoo 的 ranking, 只是在 alexa 的計算基礎下, 一直沒有呈現.

接下來看看今天的 alexa 圖表比較清楚:
先看看 reach:


其實 reach 的部分, 很單純, google.com 早在去年就超越了 yahoo.com 了, 再來看看 pageviews:


這個很明顯地, 其實是 yahoo.com 的 pageviews 下滑的厲害, 不過更有趣的是, google.com 在去年10月起, pageviews 快速上升, 使得這兩個差距明顯縮小很多. 再來就是整體的 rank 圖表囉:


呃… 不令人意外, 在一月的時候, 糾纏了一陣, 我們放大來看:

原來其實早在一月時, 就是開始超越了, 一直到後來就穩定的坐在第一名了.

yahoo.com 其實 pageviews 下滑也很明顯的看出內容性的網站和功能性的網站的差異, 內容是一種 B2C 的應用模式, 而功能卻是一種需求, 不過從 google.com 的 pageviews 上升的狀況來看, 功能雖然黏度不高, 不過看的內容卻愈來愈多了, 當然也和 google.com 提供的服務增加有關, 雖然他不做內容, 但是搜尋內容, 反觀 yahoo.com 的狀況, 他也是有搜尋, 不過卻是內容勝出的部分已經略顯不足了, 但是誰能賺到錢才是重點吧, alexa ranking, 參考參考…