Posts

Showing posts from 2013

[趨勢] 部落格的未來

Image
最近部落格界最震驚的消息, 應該是YAHOO不再經營部落格了.

首當其衝當然是陪伴我大學生活的無名從此變成回憶了.

其實不用什麼數據支持也知道,

這幾年部落格的市場真的給臉書類的社交媒體狠狠的吃了一大塊.

那嚴重程度呢?

從Google Trend中的數據可以略知一二:


以下是華人地區關於部落格關鍵字熱門度的變化



接下來看看環球的變化又是怎樣


最後再看看facebook的熱門變化


這可以說明:
部落格在2009年以後開始出現負增長, 而且走趨越來越強烈.Facebook在2009年剛剛好出現了顯注的關注程度, 而同年facebook總體使用人數也錄得很高的增長.壓跨帝國的最後一根稻草? 社交網站很多時候強調即時性跟速食性, 即時性絕對跟智慧型手機有很大的關係. 第一支android1.1係業系統誕生於2009年的2月[1], 同時iphone的銷售也比同期出現大量的增長. 由於寫部落格動不動就兩三百字, 加上插圖修修版面的工作量, 寫部落格其實是一項很費時而且不能anytime也能完成的工作. 要寫得通情達理至少要先找個咖啡廳舒舒服服的坐一下陪養一下心情再慢慢呆個五分鐘才開始寫得出來. 智慧型手機的海量資訊每天佔據人們大量時間, 有毅力寫堅持下去的人就更少了.

另外, 微博, 微訊, 微電影, 微廣告, 在這個強調速度的微世界, 在社交網站只要簡短幾個字, 拍幾張照片, 不需要想題目, 吃飯拉(---靜音)只要你喜歡就行, 隨時隨地不用一分鐘就能分享給所有朋友, 然後快速的獲得大量掌聲與鼔勵前題你是正妹, 正好適合年青人懶得寫文章的口味, 同時的確也是部落格難以達到的優點.
由於部落格先天的缺點, 只要有更方便的工具出現的話, 跨倒是早晚的事, 也許facebook只是幫一把而已.
老兵不死, 只是.... 我覺得部落格並不會消失, 正如facebook並沒有取代討論區一樣. 不過也需會變成.... 專業化: 部落格的文章開始變成是針對某一專業領域的內容, 而不是無聊哈啦的好地方, 如inside, TechCrunch, 當然還有小弟的1010啦 (毆飛). 畢竟天下所有東西不是用三言兩語就能解釋清楚的.
圖多字少: 綜觀現在很多特定類型的部落格, 例如mobile01, T客邦, 越來越喜歡圖多字少的文章. 就是圖很多, 字很少的文章(廢話), 這種文章很多時…

[SQL Server]Linked Servers中的login mappings問題

Image
話說前陣子同事打算利用SQL Server 內我已經設定好的Linked Server更新AS400的資料表(table). 出現不能更新的錯誤. 發現原來設漏了東西....囧.

以連接AS400為例子, 如果有大大跟我一樣是用ODBC做連結, 並且在AS400那邊有獨立登入名稱跟密碼的話. 當連結完了以後還要進行user mapping的動作, 否則可能會因為權限不夠更新不到. 在設定之前要先考慮這個Linked Server是否給全部SQL SERVER的使用者使用, 還是只是某些使用者才有權限進行存取.

如果Linked Server打算只開放給某些使用者存取的話:

首先選擇目標的Linked Server, 按右鍵-> "Properties"
轉到 "Security"頁面-> 按一下"Add", 在"Login Login"中選擇一個SQL Server的帳戶, 例如你打算從ABC資料庫存取Linked Server的話, 最好是使用ABC資料庫的使用者帳號. 然後在"Remote User"跟"Remote Password"中輸入AS400那邊的帳號跟密碼按OK.
如果你打算開放Linked Server給所有SQL SERVER的用戶存取的話:

首先還是跟上面一樣進入到Properties的畫面->Security的部分, 往下找到 "For a login not defined in the list above, connections will" 這一欄.選擇 "Be made using this security context:" 輸入AS400中打算用來登入的名稱跟密碼然後"OK." 那麼所有SQL SERVER的使用者也可以存取AS400的資料庫囉...

[SQL Server] 關於發送電子郵件(email)例子

今天小弟需要在SQL Server 2008上建立一個每天定時執行的Jobs(作業), 而這個Job出現問題的時候會發出email告訴DBA. 由於公司的SQL Server並沒有設好mail server, 所以今天在網路上整理了一下資料, 分享給有需要的大大參考:
先設定DataBase Mail:
funkent大的SQL Server 無敵手冊第十三篇-設定SQL Server的Database Mail 講得很詳細, 小弟就不多說明了. 設好以後可以按"Send Test E-mail" 做下測試.再來把DataBase Mail 連結到SQL Server Agent:
funkent大的另一篇 SQL Server 無敵手冊第十四篇-設定SQL Server Agent使用Database Mail 也有很詳細的說明怎樣弄.在SQL Agent底下建立Operator帳號:
同上也有介紹怎樣設定.最後在作業(Job)中的Notifications頁面, 在e-mail中選擇剛剛建立的Operator.完成. p.s:  funkent關於資料庫的文章寫得很不錯, 要用的幾乎都寫到了, 所有文章可以到這裡看看

[SQL SERVER] 找出LOCK方法懶人包

話說休假回公司才不到兩天SQL SERVER就出狀況 Orz

昨天同事跟我說文件系統不能存取ID, 第一件事當然想到是存放ID的資料表LOCK住了.

要查出LOCK方法其實有很多, 以下是小弟歸納的網路資源, 希望幫到大家

什麼是LOCK?
德瑞克大的解釋很詳細: http://sharedderrick.blogspot.com/2007/12/blocked-lock-connectoin.html

sp_lock:
使你對系統中發生的LOCK有深入的了解。它會從master資料庫中的syslockinfo中截取與LOCK相關的大量訊息[1]. 不過我認為由於這個功能的資訊太多, 而且資料沒有好好的做sorting, 所以在危急關頭未必有閒去慢慢看.
在sp_lock會看到spid、dbid、objid、indid、type、resource、mode和status共八個欄位[2].

spid: 連線ID. 可配塔sp_who找出用那些用戶和該連線(spid)有關連.dbid: 資料庫的唯一編號Objid: 資料表的唯一編號, 可用select object_id('<table name>') 找到資料表相關Objid 其他的欄位可以在這裡找到相關意思.
sp_who2 sp_who的加強版本. sp_who主要提供 Microsoft SQL Server Database Engine 執行個體中有關目前使用者、工作階段和處理序的資訊[3]。而sp_who2比較像是sp_who的view, 把sp_who的資料整理得比較好. 小弟經常用它來找出那台PC的發出的process產生了LOCK. 然後毆飛那個user


列出最初導致一連串其它處理序被鎖住的起始源頭(Blocking locks)
很多時候LOCK住的原因是其他的LOCK引發的, 要找出這種關係可以用下面網址的SQL

列出最初導致一連串其它處理序被鎖住的起始源頭http://www.dotblogs.com.tw/karen0416/archive/2011/11/18/58623.aspx
或者是德瑞克大寫得好好用的SQL
http://sharedderrick.blogspot.com/2007/12/blocked-lock-connectoin.html

取得 SQL Serv…

[ASP.NET] GridView CRUD - 如何利用DetailsView新增Gridview資料?

Image
前言:
承接小弟所分享的Gridview顯示, GridView更新資料的兩篇文章, 最後剩下新增了 (謎之聲: 不是先分享新增然後修改刪除才對嗎).

假如要新增一筆公司資料應該要怎樣呢?

新增Gridview資料的部分比較簡單. 所以下部分是多字小圖喔(無誤)

方法:

先拉一個DetailsView出來, 按一下DetailsView-> SmartTag->Configure Data Source, 把Business Object指向XSD檔案內公司主資料表COMPANY, 按Next, 然後確定insert頁面已經連結相關statement, 按finish.
然後把不需要填寫的欄位刪除掉, 順便把foreign ID的欄位轉成TemplateField.

最後把foreign ID的欄位跟DropDownList綁定, 詳細做法如這篇有說明

[ASP.NET] GridView CRUD - 如何修改被轉為顯示值的ID

Image
前言:
上一篇提到怎樣把原本在資料庫的foreign ID在presentation layer中轉為給人看的值. 這一次談一下小弟的經驗, 利用GridView去修改已經轉為顯示值的foreign ID.

例如現在需要像下圖一樣把ID為2的那筆資料的CategoryName從糖水鋪轉為其他

我需要提供可供選擇的DropDownList
方法:
先把CategoryName轉成TemplateField. 在Gridview上按一下SmartTag, 選取Edit Columns. 在Selected fields中選取CategoryName, 然後在右邊選"Convert this field into a TemplateField". 然後按OK.再次在Gridview中按一下SmartTag, 選擇"Edit Template", 然後在Smart Tag中選擇CategoryName的EditItemTemplate. 把原來的TextBox刪除, 然後拉一個DropdownList, 一個ObjectDatasource進去.
先設定ObjectDatasourceCompanyType. 按一下smart tag, 然後選"Configure Data Source", 然後選取放置文字的資料表, 像我這裡在COMPANY_TYPE, 選好以後按finish.把DropDownList連結到ObjectDataSourceCompanyType. 按一下DropDownList-> smartTag -> Choose Data Souce. 把要顯示值還有data field設好. 按OK.
把DropDownList綁定GridView上的Category ID, 即是告訴系統說我這個DropDownList的值其實就是Category ID. 在DropDowdList中-> SmartTag->Edit Databindings
在"Bindable properties"中選取"SelectedValue", 在右邊Bound to選取儲存Category ID的欄位"CATEGORY", 勾選"…

[ASP.NET] GridView CRUD - 如何把ID轉為顯示的值

Image
前言:
我想很多大大寫ASP.NET的時候也會遇到同樣的問題: 很多時候為了很多原因, 例如Data size, 速度, 不過度扁平化資料表等等, 在資料庫的設計上我們會進行normalization. 例如公司名稱用CompanyID取代, 然後把真實給人看的名字分割到另外一個Table.

因此當我們要把資料顯示在Presentation layer(就是使用者介面)的時候, 一定逃不過要把資料表JOIN起來.

傳統的做法是把JOIN好的SQL直接寫在SqlDataSource裡面. 這樣很方便是沒錯, 不過除了在維護上會很困難, 也違反了把Data access layer跟Presentation layer 盡量loosely coupled的原則.

不過好死不死, ASP.NET 的Gridview功能實在有點雞肋, 它不能像dropdownlist一樣可以選擇Display value. 我自己之前用的笨方法是先把只有值的table跟Gridview進行連結, 再寫一個class放在Data bounded的事件中把值換成顯示的值. 老實說真笨....

前幾天又遇到了老問題, 我堅決不相信就是沒有解決方法, 查了MSDN老半天 終於守得雲開見月明, 柳暗花明又一.....(喂).

方法:

準備工作:

先用XSD檔案(Dataset)描述資料表, 例如公司資料表中的CATEGORY欄位對應顯示用資料表COMPANY_TYPE的COMPANY_TYPE_ID. 
另外資料表中的TableAdapter使用最簡單的SQL STATEMENT, 例如資料表COMPANY使用的就是select * from COMPANY, 完成後應該會自動產生UPDATE, INSERT跟DELETE的指令.接下來修改COMPANY資料表. 在COMPANY資料表上的TableAdapter按一下右鍵->Configure
把原來超簡單的sql換成下面這一句


好像很難, 說穿了其實只是在原本COMPANY資料表後面加上要願示的欄位而已. 改好了以後按NEXT NEXT NEXT到OK就可以了.實作:
設定ObjectDataSource 首先反回aspx頁面, 抽一個ObjectDataSource叫ObjectDataSourceCompany, 在ObjectDataSource上…

[Windows7] 跨距磁碟區, 等量磁碟區, 鏡像磁碟區之區別

Image
話說前兩天用來備份的USB硬碟無緣無故去領便當了.

大幸的是我一直有好好備份, 資料至少存在兩顆硬碟上, 所以備份硬碟掛了損失也不大(錢包除外).

所以昨天下班以後趕緊去買一顆seagate的2TB內置硬碟回家(感覺USB硬碟還是不太安全), 裝好以後突然想到一個問題:

現在我桌機總共有5顆硬碟, 首先是剛買回來的2TB, 1顆80G SSD, 1顆640G, 1顆320G, 1顆160G. (真多舊硬碟囧), 關於硬碟的部分Windows 7比XP多了一些選項, 應該選那個才對?

讓我自己先分析一下:

那麼零碎的硬碟應該選擇合拼方案為主關於合拼的方案Windows7有三大選項, 分別是跨距磁碟區; 等量磁碟區; 鏡像磁碟區三種, 應該怎樣選呢?
說穿了那三種其實就是軟體的RAID方案, 硬要改一些好像很簡單又不簡單的中文字.
其實: 跨距磁碟區 = JOBD,  就是簡單把幾顆硬碟變成一顆大的邏輯硬碟, 資料的存放機制是由第一顆硬碟開始依序往後存放,即作業系統看到的是一個大硬碟(由許多小硬碟組成的)。但如果硬碟損毀,則該顆硬碟上的所有資料將無法救回。若第一顆硬碟損壞,通常無法作救援(因為大部分檔案系統將磁碟分割表(partition table)‎存在磁碟前端,即第一顆)[1]
等量磁碟區 = RAID 0 把資料分散在幾顆硬碟, 存取的速度比較快, 不過壞一顆又是全部壞掉.
鏡像磁碟區 = RAID 1 顧明思義有兩份data, 超安全, 不過由於write的時候也要write兩份, 所以速度會慢.
更詳細的解釋這裡[2]魚仔大有好好的解釋說明三種功能, 小弟就再不說了.
總結: 那我要怎麼辦? 最後我選擇的是....什麼都不做, 80G的SSD留給OS及程式專用, 640G的用來放照片/動畫/影片/影像檔, 320G的用來放文件還有裝一些不重要的應用程式(遊戲啦,遊戲啦,還有一些遊戲之類的), 160G的用來裝音樂還有.......你懂的. 至於2TB的那顆就是當成上面所有硬碟的mirror, 用sync工具即時備份.
為 什 麼 ?
因為JORB不是不好, 不過把那幾顆舊硬碟變一顆有很大的風險, 因為那幾顆碟使用的時間不同品牌也不同, 萬一其中一顆掛掉就哭死了.
RAID0是快沒錯, 不過除了上面的原因, 也因為全部硬碟當同一顆運行, 全部硬碟也不能變回待機的狀態(不像現在沒用那顆就變…

[SQL Server] 移動資料庫檔案

Image
有使用SQL SERVER的大大也知道SQL SERVER的資料庫其實只是一個檔案(感覺好虛).

最近公司要把資料庫檔案移到新硬碟, 寫下了一些T-SQL順便筆記一下步驟:
首先把要移動的資料庫離線(OFFLINE), 例如我的資料庫是dbABC
ALTER DATABASE dbABC SET OFFLINE WITH ROLLBACK IMMEDIATE
WITH ROLLBACK IMMEDIATE 跟據這裡的解釋是說把所有在跑的transaction全部ROLLBACK.
如果發現不行的話, 可以用下面的指令把佔用database的process殺掉:
exec sp_who2 (把所有資料庫在跑的sessions列出來)
kill <process_id> (幹掉它)
移動資料庫檔案及log file到新硬碟去:
ALTER DATABASE GEE MODIFY FILE ( NAME = ABC , FILENAME = 'D:\dbABC.mdf')
ALTER DATABASE GEE MODIFY FILE ( NAME = ABC_log , FILENAME = 'D:\dbABC_log.ldf')
重新啟動資料庫:
ALTER DATABASE GEE SET ONLINE
喝淡定紅茶

[SQL Server] 利用Linked Server轉移大量數據到SQL Server之方法(以AS400為例)

Image
[20140110] 新增OLE DB版本
上次提到當我們進行異質資料庫的資料轉移,使用SQL Server內建的工具經常會發生很多不明的錯誤(例如Column size太大)。那怎麼辦呢?總不可能把資料全部變成insert Statement吧?經過爬文以後小弟最後選用了SQL Server裡的Linked Server功能. 也成功轉移了超過2000萬筆資料的資料庫,雖然可能並不是好方法也希望對大家有幫助 :-)

什麼是SQL Server 的Linked Server?
Linked Server (連結的伺服器) 根據msdn的解釋, 就是 "可讓 SQL Server Database Engine 對 SQL Server 執行個體外部的 OLE DB 資料來源執行命令。" 再說白一點, 就是可用T-SQL查詢其他品牌的資料庫。

來源資料特性:
資料在老舊的V5R4 AS400上.很多資料表(Table)的欄位(Columns)很多,接近50個欄位以上。欄位的size很大, 長度達3000或以上, 而且因為是char的關係就算改成varchar也沒用.資料量大, 很多Table超過200萬筆.
準備工作:
由於這次使用的是AS400的ODBC或OLE DB, 所以在SQL Server端一定要先安裝IBM iSeries Client Access.在SQL Server中先建立一空的資料庫需要有SQL Server SA權限的帳號動手做: 建立Linked Server
打開SQL Server Management  Studio, 登入後到Server Objects->Linked Servers->按右鍵新增Linked Server
如果你用的是ODBC
在"Linked Server"中填入此Linked Server的名字, 任意也OK, 由於這次對象是AS400, Server type要選擇Other data source, 由於這次使用的是ODBC connection, 所以Provider一欄要選擇 "Microsoft OLE DB Provider for ODBC Drivers", Product name先填as400, Data Source選擇ODBC中的來…

[AS400] 小量數據轉移數據到SQL Server之方法 (2013/07/11更新)

Image
這幾天要幫公司把data從老舊的AS400轉移到SQL Server上面去。
由於之前沒有任何經驗所以先問一下古哥。
很多大大也是使用SQL Server內建的Import Export Wizard。
以下是我利用odbc的方法成功移轉的經驗,未必是最好不過希望給大家參考一下。

準備工作:

先在目的SQL Server建立一空的資料庫, 例如"AS400"
由於我用的是ODBC,所以目的地端的SQL SERVER一定要先設好IBM的Client Access,我的版本是V5R4M0。最後要設好連接到成功連接到AS400的ODBC連接字串。
另外檢查一下Client Access中有沒有設定使用者名稱,不然等一下會連不到喔。在ODBC資料來源管理員中選擇AS400的連接,按"設定"在"General"頁面中按"Connection Options"在"Use the user ID specified below"中輸入登入名稱,按"OK" 步驟: 在剛剛建立的空資料庫按右鍵-> Tasks-> Import Data,彈出匯入和匯出精靈後按下一步。
接下來是 "選擇資料來源" 頁面:
資料來源選擇".Net Framework Data Provider for Odbc"

Dsn填寫ODBC中連接AS400的字串名稱,如我的ODBC字串是AS400ODBC,填寫的就是這個名稱。並不是Dsn=AS400ODBC;uid=terence 這種喔。

填寫完以後按下一步。如果連接成功會來到"選擇目的地"頁面,不然就會出現謎一樣的錯誤,小弟試過的錯誤包括:
DSN格式錯誤在Client Access中沒有指定使用者名稱。 在選擇目的地畫面設好目的地的資料庫,如我目的地的資料庫叫AS400,設好以後按下一步。
選擇"從一或多個資料或檢視表複製資料"或"寫入查詢來指定要傳送的資料",我選的是第一頁,按下一步。接下來選擇需要匯入的資料表,要注意的是在準備工作中提到的在Client Access中的User權限是否足夠。選擇好以後按下一步。
再按下一步,直接按"完成"就開始複製工作,完成後出現以下畫面
最後打開查詢視窗打一下SQL …

[SQL Server] 關於香港常用字(或難字)的字元儲存問題

Image
哎。又是歷史交給我們偽DBA的問題。

最近有很多big-5碼的資料從AS400轉移到SQL Server上去。

把Big-5的資料轉到SQL Server其實並不難(可參考小弟的這篇文章)

問題是資料中有很多Big-5編碼的香港字(或叫難字,造字,增補字,罕用字),

當這些字放到只有相容Unicode的資料型別(Data Type)的時候就會變成問號。

加上將來公司鐵定會慢慢放棄使用Big-5編碼改成Unicode,就算今天A眼開B眼閉,面對全民Unicode的趨勢早晚也是單拖要面對囧。現在做點研究,也許將來就省點事吧。

所以剛剛小弟就做了點小測試,首先建立一個Table包含以下data type的四個欄位,然後在每一個不同data type的欄位中新增同一筆含有香港字的數據。

charncharvarcharnvarchar
測試過程小弟就不多說了,結果如下圖:

結論:

如果資料欄位需要支援 Unicode,必須使用 nchar,nvarchar或ntext 型態。nchar,nvarchar在同一欄位同一筆資料中可同時存在big-5或Unicode的香港字。當存取Unicode的香港字的時候,請記得在Insert statement中加入N字,不然將無法存取。(說明在此)將Big-5編碼的香港字變成Unicode會是一種非常爆肝的過程(無誤)

[SQL Server] 什麼是BUILTIN\Administrators用戶?

昨天代表公司去聽一個SQL Server 2012的講座,內容中提到2012版本中已經移除BUILTIN\Administrator帳號,身為SQL Server界Lv1的菜鳥當然不知道那是什麼,回公司以後上網問問古哥大大(Google),終於搞懂了。

這個群組最大的問題是無法明確分辨誰是SQL Server的Administrator,誰是系統的Administrator。
因為這個群組令伺服器的Local Administrator具備SQL Server的管理權限。那至少保安考慮上問題就大了。

要解決這個問題可以把群組刪除掉,詳細步驟在此

話說這個年頭One Man Band的IT人真的不好當啊 唉

參考資料:
http://www.blackberryforums.com/bes-admin-corner/195873-qq-what-builtin-administrators.html
http://social.msdn.microsoft.com/forums/en-US/sqlsecurity/thread/81970e88-104d-4e89-ade8-746def18108e/
http://www.chinaz.com/program/2009/0204/65528.shtml

[ASP.NET]如何登入網路上提供的服務?

Image
原文: http://msdn.microsoft.com/en-us/magazine/jj883954.aspx

話說這一陣子很多網站流行把使用者認證外包給facebook的API去處理。先不談這個方法好不好,如果要做到的話應該怎樣弄呢? 剛好看到MSDN一篇技術文章有一個例子大家可以抄參考看看喔.....=皿=

大概就是使用Windows.Security.Authentication.Web這個namesapce.

機制如下: