2012年6月18日 星期一

讀書心得:Peopleware腦力密集產業的人才管理之道


知道這本書,是從「約耳談軟體」上面看到的
後來跑去書局看了一下,覺得這本書還蠻有趣的
就把這本書買回來了

感覺作者對於管理軟體開發人員的要點,就是...「帶人要帶心
以前我還待在SI公司的時候
對有些事情不太滿意的地方(不過,我可是很喜歡這間公司的),都在這本書上找到了解答
舉個例來說,以前每個星期都要開專案進度會議
全部門的人,待在會議室排排坐,等著主管一個一個點名報名進度
我一直覺得這是個很浪費時間的做法
要掌控專案進度,有很多種方法,沒有必要花費大家的時間來聽其他人的進度
以及聽主管在罵人
每次開會時間,少則半個小時,多則二個多小時
我後來在這本書上找到了解答
作者說明了主管會以這樣的形式開會,是因為某些原因(當然是不要的原因)

除了這個之外
這本書還說明了何謂團隊殺手
哪些是團隊形成的化學因素
甚至辦公室座位的安排..等等
很有趣的一本書
值得從事軟體開發人員買回家收藏,每年都要拿出來看一次





2012年5月9日 星期三

ASP.NET MVC:改變View的charset編碼(Encoding)


最近有一個case是要將資料用post的方式傳給其他業者
其中有一個參數是中文字
而對方系統是使用big5編碼(都西元2012了...)
我們當然是UTF8
這下子有點玩了
看一下我的處理方式

以前在寫php時,只要在程式裡面加了下面這一行
header('Content-type: text/html; charset=big5');
Web Server在產生網頁時,就會以big5編碼

但是asp.net mvc 3呢
我的處理方式是:
寫一個繼承ActionFilterAttribute的class

protected class Big5CharsetAttribute : ActionFilterAttribute
{
  public override void OnActionExecuted(ActionExecutedContext filterContext)
  {
    filterContext.HttpContext.Response.AddHeader("Content-Type", "text/html; charset=big5");
    filterContext.HttpContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("Big5");
  }
}

重點就是這兩行
filterContext.HttpContext.Response.AddHeader("Content-Type", "text/html; charset=big5");
filterContext.HttpContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("Big5");
將ASP.NET MVC預設的header和編碼改成big5

然後,Controller的action名稱前面再加上[Big5CharsetAttribute]
例如:
[Big5CharsetAttribute]
public ActionResult AutoSubmitForm()
{
//your code

return View();
}

這樣,這個action就會用big5來產生view

還沒完喔,再來是html的部份
view最好要加上這一行
<meta http-equiv="Content-Type" content="text/html; charset=big5" />

這樣兩個系統就能用中文來溝通啦。
(還是老話一句,現在是unicode的時代...)

2012年5月1日 星期二

讀書心得:序

從開始工作以來
一直保持著喜歡看書的習慣
不過大部份看的都是跟軟體開發有關的書
除了自己喜歡學習之後
深深的感覺到,軟體開發這一行
光有經驗是還不夠的
必須再吸收一些新的東西
因為你可能從前輩身上學到的,也不一定是最好的做法
軟體是會隨著時間的淬練(資料、架構、需求的擴大)
來驗證你所開發的軟體是否經得起考驗
因此必須不斷的吸收新知識,來讓自己前進

不過話說回來,我所看的書,大部份是跟系統分析、開發有關的書
之後有時間,我會慢慢的把看了這些書的心得寫上來
除了方便自己記錄之外
也讓想看這些書的人,做個參考。

2012年4月23日 星期一

C#:convert to ASCII

在C#中,要將字元或字串轉成ASCII code的方法如下

char charWord = 'a';
int asciiCode = Convert.ToInt32(charWord);

string stringWord = "812";
byte[] asciiBytes = Encoding.ASCII.GetBytes(stringWord);

若是char時,直接用Convert.ToInt32()來轉換即可
若是string,則利用Encoding.ASCII.GetBytes()來取得陣列
以812為例,會取得56 49 50

2012年4月20日 星期五

C#:string convert to DateTime


將日期型態轉成字串格式,最常用的就是:
string testDate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

但是要將字串轉成日期型態就比較麻煩一點的
可以用DateTime.ParseExact()來處理
假設有一個字串格式為yyyyMMddHHmmss
那麼轉換的code如下


string testDate = DateTime.Now.ToString("yyyyMMddHHmmss");
IFormatProvider cultureStyle = new System.Globalization.CultureInfo("zh-TW", true);
DateTime time = DateTime.ParseExact(testDate, "yyyyMMddHHmmss", cultureStyle);

2012年4月9日 星期一

T SQL: stored procedure讀取XML


這裡記錄一下自己覺得好用的讀XML方法
首先,看一下要執行的SP及傳入的XML參數
Exec sp_TestXML
@prdxml ='<products>
<data>
<id>3</id>
<itemdata>
<itemname>notebook</itemname>
<amount>30000</amount>
</itemdata>
<itemdata>
<itemname>CPU</itemname>
<amount>5000</amount>
</itemdata>
</data>
</products>'


XML的格式說明:
<products>的tag裡,只能有一個<data> tag
但是<data>裡可以有多個<itemdata>
也就是master-detail的格式

再來看一下stroed procedure內容:

Create PROCEDURE [dbo].[sp_TestXML]
@prdxml xml

AS
BEGIN
Select x.value('.','VARCHAR(5)') as id
from @prdxml.nodes('/Products/data/id') as params(x)


Select Item.value('(./ItemName)[1]','VARCHAR(max)') as ItemName
,Item.value('(./Amount)[1]','int') as Amount
from @prdxml.nodes('/Products/data/ItemData') as params(x)


Select Item.value('ItemName[1]','VARCHAR(max)') as ItemName
,Item.value('Amount[1]','int') as Amount
from @prdxml.nodes('/Products/data/ItemData') as Product(Item)


RETURN

END

首先,參數要宣告成xml型態
裡面第一段寫法,是要讀XML的master部份
第二段和第三段寫法,都是要讀detail的部份
只是table的名稱有差異
可以比較一下這三段的From子句
以及Select子句的差別
看自己喜歡哪種寫法







2012年4月5日 星期四

SQL: ISNULL(), NVL(), IFNULL() 函數

在寫SQL語法時
若要將SELECT的欄位由NULL轉為空字串(empty string)
以我用過的三個資料庫的函數分別如下:
Oracle: NVL()
SQL Server: ISNULL()
MySQL: IFNULL()

以SQL Server為例,可以用這樣的語法來將null轉為你要替換的字串
SELECT ISNULL(Column,'')
FROM YourTable

不過,寫了這麼多年的SQL
很少遇到要將欄位的空字串轉為NULL
我是用REPLACE()來轉換
SQL Server的用法如下:
SELECT REPLACE(Column,'',NULL)
FROM YourTable