2012年3月6日 星期二

[讀書心得 part1] 交辦的技術

 這本書是透過博客來的eDM才看到的,剛好這陣子遇到了。看了一下書的介紹感覺還蠻有趣的就用禮券去金石堂買了(哈)。

雖然說我不是主管,但卻一職被賦予要帶team member做事的使命,我從事軟體相關工作,從工作到現在大概六年,除了第一年沒有帶member,之後幾乎每一年都需要帶member做事,這時候member能力的好壞,以及我跟member之間的關係就嚴重地影響到工作的成果。

底下要分享的是我自己的心得對應書裡的章節

當主管第一件要學的事 (先說我根本不是主管)
  1. 放手讓他做,他就會成材
    • 我的經驗來說,要放手讓member還是要考量member的能力。如果member能力不足,放手讓他做只會造成他的壓力,但我卻一直忽略了壓力才能讓人成長,不過我個人覺得只有適當的壓力才會讓人成長,過多的壓力只會壓垮member,所以要衡量交辦一件事情對member造成多少壓力其實不好評估。我只知道能力好的壓力應該會比較低,能力差的壓力應該很大。
  2. 交辦失敗會摧毀一個人
    • 最近一位我帶的member因為能力不太足夠,我所交辦的每一件事情感覺對他都造成了莫大的壓力,但這件事情我卻是過了一陣子才發現,喪失了讓他學習的機會,因為能力不夠的關係,應該已經讓他連學習的時間或想法都沒了,尤其我所從事的工作是需要寫程式的,寫程式這種東西會的就是很快,不會的你給他再多時間可能都不夠。如果我能早點發現他的能力不足,或許可以提早訓練他,但目前因為專案時程都很趕,有時候跟他的對話都會因為他完成事項的不足而露出不滿意的話語,我想這部份真的很值得學習。與其交辦失敗摧毀一個人,倒不如想方法讓這個member變成可用之材還比較好。
  3. 糾正【無法交辦】心態的訣竅
    • 這裡主要是說,對於事情要不要交辦,主管的心態會去衡量說
      1. 這件事情太難,還是我自己來好了
      2. 這件事情太簡單,我來處理比較快
    • 其實身為一個leader如果不適當的把手中的事情交辦出去,最後只會造成自己生產力降低而已,對老闆來說身為leader的你的產出,不應該跟身為你member的產出是一樣的價值的。身為leader應該著重在規劃,再把規畫要做的事情交付給member,這樣才能提升團隊的績效。所以不管什麼事情,只要是可以交辦給member的應該都要盡量的交辦出去,不然最後member沒事做,自己卻因為事情太多處理不完而成為團隊的bottleneck,對團隊來說是一點幫助都沒有,所以應該要往這個方向去邁進,member也能從交辦的事項當中學習到處理事情的經驗,就由交辦事項提升能力,期望能一舉兩得。
其實在PMP中也有一個領域是在講Human Resource Management的談到獲得專案團隊、開發專案團隊及管理專案團隊,遇到人的問題真的去實施都是很難的。

2011年3月7日 星期一

模擬Javascript取得client IP

有朋友問在LoadBalance後的ASP.NET程式取得的Client IP都是LB的虛擬IP,這是因為後面的LB之後,Client的Request會先傳送到LB的Server,再透過LB往後傳送到真實的Server,所以透過ASP.NET的Request.UserHostAddress會抓取到的是虛擬IP。針對這個問題我想到的有兩種解決方案,第一透過RIA程式,例如Silverlight或Flex之類的程式抓取ClientIP後,再透過操作dom物件塞到html dom,這樣submit的時候就能取得;第二種做法是找一台不在LB後面的機器,也就是用IP可以直接access到的server,在這一台server提供一個模擬Javascript寫出hidden的欄位,其值再給予Client IP即可(因該Server不在LB後面所以Request.UserHostAddress可以正確抓取Client IP),以下示範第二種做法使用ASP.NET實做。

2010年10月19日 星期二

LINQ not in

今天因為處理繪圖需要針對集合做not in的運算,主要是因為TeeChart提供的API實在太弱了,所以有些運算只好自己土法煉鋼。故事大綱是這樣的,我有100個Point,符合條件的其中的20個我想要拿掉,如果不使用LINQ的話,做法如下

    //針對Point的定義
    class PointF
    {
        public double X { set; get; }
        public double Y { set; get; }

        public override bool Equals(object obj)
        {
            PointF inObj = obj as PointF;
            return this.X == inObj.X && this.Y == inObj.Y;
        }
    }

    List points = new List(); 
    List flagPoint = new List();  
    for (int i = 0; i < 100; i++) 
    {
       PointF point = new PointF { X = i, Y = i };
       points.Add(point);
       if (i % 5 == 0) //製造符合條件的point
          flagPoint.Add(point);
    }
    Console.WriteLine("total point {0}",points.Count.ToString());
    Console.WriteLine("flag point {0}", flagPoint.Count.ToString());
    //比對以移除符合條件的點
    for (int i = 0; i < points.Count; i++)
    {
       for (int j = 0; j < flagPoint.Count; j++)
       {
          if (points[i].X == flagPoint[j].X && points[i].Y == flagPoint[j].Y)
          {
              points.Remove(points[i]);
              break;
          }
       }
    }
            
    Console.WriteLine("points point {0}", points.Count.ToString());
    Console.WriteLine("flag point {0}", flagPoint.Count.ToString());

    Console.ReadKey();
其結果如下
改成使用LINQ的話
 
 List points = new List();
 List flagPoint = new List();
 for (int i = 0; i < 100; i++)
 {
     PointF point = new PointF { X = i, Y = i };
     points.Add(point);
     if (i % 5 == 0)
        flagPoint.Add(point);
  }
  Console.WriteLine("total point {0}",points.Count.ToString());
  Console.WriteLine("flag point {0}", flagPoint.Count.ToString());

  points = (from c in points
            where !flagPoint.Contains(c)
           select c).ToList();

  Console.WriteLine("points point {0}", points.Count.ToString());
  Console.WriteLine("flag point {0}", flagPoint.Count.ToString());

  Console.ReadKey();

結果會與上面一樣

透過LINQ,程式碼可讀性會提高很多,不過這裡的not in的用法第一次用,所以稍微花了點時間找

2010年8月20日 星期五

Java 與 .NET 使用心得

本來下面的內容,是要寫在SCWCD考試心得的,不過看看好像有點跳Tone了,所以就另外寫一篇文章來分享吧 ^^

我想要分享一下J2EE跟.NET技術的心得,雖然很多年沒寫Java了,但這些年並沒有荒廢學習新的技術,可以說其實這幾年非常熟悉使用.NET的技術來開發系統了,說.NET技術可能並不會有啥大不了的感覺,但如果說用.NET的架構可 能就有比較囂張一點,一直以來Java的人都有點瞧不起.NET的,認為那不過是玩具而已,年紀好像越資深越是這樣。

我的看法是這樣,我從2000年開始 學習使用Java技術,當時還是個學生,到了2003年開始接觸.NET,當時也還是個學生,當時的我覺得.NET真是個抄襲Java抄襲的很完全的東 西,不過Tool真的做得蠻好用的,就是相關的套件(Ex: Collections)少了點,2005年後開始工作,也沒想太多,人家說用什麼就用什麼,所以一開始就來比較硬的Struts,當初也學到不少東西, 因為搭配Ibatis,順便在當時學到了ORM的技術,不過沒寫多久就被抓去寫.NET了,那之後寫了將近五年的.NET;也從一邊喜歡.NET的好 Tool,一邊抱怨.NET可以用的Framework太少,到現在看到.NET的大成長(WF,WCF,WPF,ORM EF,LINQ),現在的我覺得.NET已經超好用了,沒想到卻要回去寫Java了,再回來看Java,這幾年幾乎沒啥大進步,實在覺得有點可惜。

不過有老師說:[技術本身沒有好壞,只有用的人才有好壞],我可以理解這個道理。我目前的公司已經有20幾年的歷史,資訊系統少說也有十幾年的歷 史,.NET也不過就是在這幾年才大躍進,如果在那個時間點,腦袋沒壞的人應該也都是會選Java吧(其實這裡還有很多C跟C++呢),而身為一個IT人 員,不應該只是因為專長於某種特定的技術而自喜,反而應該站在管理者的角度去看,這個時候應該用什麼技術,用什麼Solution才是對後續的發展是有益 的。最後,如果你只是把自己定位成一個IT黑手,我相信這樣心態的人可能早晚會被時間的洪流所淘汰,但如果你是把自己定位成一個IT問題解決者,我相信你應該無時無刻都在學習新的技術、架構跟管理手法吧,時間的洪流對你來說,不會只是年紀的增加,還會有知識與經驗的成熟,希望大家能一起共勉之。

SCWCD 考試心得

其實今年是本人第一次換工作,長久以來已經用.NET的技術非常的習慣了,也從來沒想過會再回來接觸Java的技術,進新公司後老闆的期許就是去弄一張SCWCD的證照來,所以也只好入境隨俗去考一張來應應景。這其實已經超過我考證照的極限了,一直以來我都是一年頂多一張證照,而今年年初我就已經去弄了張微軟的BI證照了,想說以後應該可以少寫很多程式開始來玩商業智慧了,沒想到人算不如天算,進了家大公司後,其實資訊系統相當龐大且複雜,所以才發現自己會的技術便顯得相當的渺小了。

廢話不多說,我準備SCWCD其實大概一個月,但是考試的書(猛虎)是從三個月前就已經買好擺在那了,一直以來都有斷斷續續在看,而早在大學時期其實就有寫J2EE的經驗了,剛開始工作的第一年也有寫J2EE,還是用Struts呢,所以對SCWCD的考試內容其實並不算陌生(章節都有看過,就是內容不清楚而已 ^^"),建議真的要考試的人還是要工作有用到才好,不然其實像我寫了好幾年的.NET,在看SCWCD的時候,常常會想到這個技術在.NET裡面是怎麼用的,有時候會分心,心中只是care如果用.NET來寫應該怎麼用(我承認我是來鬧的),不過也因為這樣讓我對J2EE的技術更加的了解,這對我準備SCWCD來說是另一項收穫。

如果你已經是一個熟悉J2EE的開發者,建議你只花兩個禮拜來準備就好了。首先花一個禮拜把猛虎從頭到尾看一遍,另一個禮拜安排每天練習習題,最好到考試前能夠重複練習超過三次以上,把會答錯的問題做上記號,考試前一個小時光看那些會答錯的題目就好了,我是依循這樣的方式去考,最後雖然沒有滿分過關,但分數也不低就是了。

如果你不是一個熟悉J2EE的開發者,建議你先買額外的書籍,在此建議買Head First系列的JSP and Servlet,不過你可能需要先花一個月K這本書,另外在花另一個月K猛虎吧,這樣是為了確保考過之後,你是真的懂SCWCD,而不是只是考過而已。

我是在新竹的巨匠考的,因為剛好之前在台北的巨匠有上過課,所以在巨匠買考券有折扣(詢問過III,UUU了),不過考試前倒是有一些小插曲,當我進入考場詢問考場人員相關注意事項的時候,考場人員丟了一句話說,如果你是背題庫的,請至少撐過半小時再出來,真是傷人阿 ;雖然我是看著題庫練習的,但被這樣說是有點不爽,不過這表示Oracle SUN的考試本來就有漏洞阿,題庫在外面就買的到了,還是最搶手的書籍,這能怪誰呢。

前一份工作我還有機會可以面試新人,當時看到有證照的人我通常會問一些相關的問題,已確定他是否真的有實作經驗,而不是背題庫去換張證照而已,沒想到當我去考試的時候,還被這樣詢問,實在是有點不是滋味。

2010年7月21日 星期三

探討ASP.NET Run Account

會寫這篇文章是因為最近使用WCF 呼叫 COM object的時候遇到了權限的問題。原本我一直以為WCF host on IIS的時候,他的Run Account就會和ASP.NET的設定一樣,由於我原本所撰寫呼叫的COM object使用WCF host在IIS上的時候,一直出現奇怪的錯誤(看不出來是權限問題),但是host在console ap or windows service上面都是OK的,所以我還是直覺是Run Account的問題。為了解決這個問題我才知道WCF的Run Account並不是跟ASP.NET的設定一樣,而是直接聽命於Application pool的Run Account。底下做了一些實驗(PS:先確定ASP.NET的authentication mode為windows)。

實驗一:預設的Run Account (新增一個aspx的頁面,並於加入底下程式碼)
protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    }
上面的程式碼執行結果如下
 由上圖可知,預設為NETWORK SERVICE的帳號在執行asp.net的頁面

2010年6月14日 星期一

Hibernate in Eclipse

本篇文章先不介紹Hibernate的相關內容,只著重在如何搭配Eclipse plugin來產生Hibernate的相關設定檔。

要讓Hibernate能夠work的最基本條件,就是需要有底下三種東西
1.Configuration File (hibernate.cfg.xml)
2.Mapping File (*.hbm.xml) ->hibernate 3.x 可以直接使用Annotation在DTO 中描述即可
3.DTO

依照下列的操作方式,一步一步即可 (注意 : 這裡亦不介紹hibernate plugin的安裝,之後的文章中再介紹)

步驟1:注意,這裡要選擇Others(圖片抓的不好)