| Subcribe via RSS

Effective C# [ I ]

April 26th, 2009 | No Comments | Posted in .Net, c#, นอกงาน

 ใช้ “as” ในการ “cast”

C# เป็น Strong type นั่นหมายความว่าเราควรหลีกเลี่ยงการ แปลง type เท่าที่เราจะทำได้ แต่บางครั้ง มันก็เลี่ยงไม่ได้… บางครั้งเราก็จำเป็นต้อง downcast object ไปเป็น type อื่นๆไม่เว้นกระทั่ง class หรือ interfaces เรามีทางเลือก 2ทางคือ ใช้ as operator หรือใช้ cast และเราก็มี “is” ที่ทำให้เราสามารถทดสอบก่อนว่า เราสามารถ convert ได้หรือเปล่าถ้าconvert ได้ก็ค่อยใช้ as หรือ casts

 
ทางเลือกที่ถูกต้องคือ ใช้ as operator ….เพราะมัน safe กว่าการ casting และมีประสิทธิภาพมากว่า ณ runtime , as และ is operators จะไม่สร้าง object ใหม่ เพื่อ satisfy a request
object o = Factory.GetObject( );

MyType t = o as MyType;

if ( t != null )
{
  // work with t, it's a MyType.
} else
{
  // report the failure.
}
Code ด้านบนเป้นการ ใช้ as แทนการ cast Object มาเป็น MyType ถ้าไม่สามารถ cast ได้ t จะมีค่าเป็น null
….ต่างกับ การใช้ “cast” ดัง code ด้านล่าง
 
object o = Factory.GetObject( );

try {
  MyType t;
  t = ( MyType ) o;
  if ( t != null )
  {
    // work with T, it's a MyType.
  } else
  {
    // Report a null reference failure.
  }
} catch
{
  // report the conversion failure.
}

จาก code เราต้องใส่ try/catch clause เพื่อกัน exception จากการแปลงที่ผิดพลาด ทั้งยังมี overhead อีก

สังเกตว่า การที่เราต้อง check exception  จากการใช้ cast เพราะ ถ้าobject ไม่ใช่ Type ที่สามารถ cast ได้แล้ว จะเกิด InvalidCastException [Unable to cast object of type 'Factory' to type 'MyType'.] ทันทีซึ่งเพียงแค่นี้เราก็หันมาใช้ as แทนได้แล้ว :) เพราะ เราแค่check ว่า reference ที่ return มาเป็น null หรือเปล่าแค่นั้นเอง แถมไม่มี Exception มากวนใจ.
สิ่งที่แตกต่างกันอย่างมากของ as และ cast คือ as และ is operator จะพิจารณา runtime type ของ object ที่ถูก convert และจะไม่ทำอะไรอีก หาก object ไม่ได้รับ type ที่ต้องการแล้ว จะถือว่า fail ในทางกลับกัน Cast,ใช้ conversion operator เพื่อจะ convert object เป็น type ที่ ถูก request นั่นรวมถึง การทำ built-in numeric conversions เช่นการ Cast long ไปเป็น short จะทำให้เราสูญเสียข้อมูลได้
 
จากที่อ่านมาเราอาจสรุปได้ว่าควรใช้ as แทนการ cast แต่ยังมีกรณีที่เราไม่สามารถใช้ as ได้…
as ใช้กับ Value Type ไม่ได้ !!
 
value type เช่นพวกเกี่ยวกับตัวเลขทั้งหลาย int double float long ….
 
ใช่ครับ เราต้องกลับไปใช้ cast เหมือนเดิม แต่ไหนๆต้องใช้ทั้งทีเราก็ควรใช้ “is” เพื่อตรวจสอบ แทนการ ดัก try/catch ดังโค้ดด้านล่าง
 
object o = Factory.GetValue( );
int i = 0;
if ( o is int )
  i = ( int ) o;
ถ้า object มีType เป็นชนิดอื่นที่ไม่ใช่ int เช่น double, operation นี้จะมีค่าเป็น false
 
ไม่จำเป็นต้องใช้ is ร่วมกับ as
 
MyType t = null;
if ( o is MyType )
  t = o as MyType;
 
หรือ
MyType t = null;
if ( ( o as MyType ) != null )
  t = o as MyType;
เพราะเราสามารถ check value ของ operation as เป็น null ง่ายกว่าเยอะ 
 
สรุป เราควรหลีกเลี่ยง Converting Types แต่บางครั้งมันก็จำเป็น แต่ถึงกระนั้นก็ควรใช้ as และ is operators เพราะ มัน ชัดเจนกว่า การ cast ปกติ, และเราไม่ต้องคอย ดัก exception เพื่อตรวจสอบ type ที่ไม่ถูกต้อง 
 
Tags: , , , ,

เส้นทางโปรแกรมเมอร์[Developer]

April 19th, 2009 | No Comments | Posted in นอกงาน

หลังจากทำงาน ด้าน Programmer มา2ปี (กับอีก1วัน) …อืมเราก็ทำงานมานานพอควรแล้วเหมือนกันแต่   ที่ผ่านมาก็แค่ทำหน้าที่ของตัวเอง ศึกษาหาความรู้ ดูว่าเราก็พอทำอะไรได้บ้างเหมือนกัน ก็เริ่มคิดถึงอนาคตตัวเองเหมือนกันนะ ว่าเส้นทางของโปรแกรมเมอร์นั้นเป็นยังไงกัน เลยไปลองถามอาจารย์กูเกิ้ล

เจอคำแนะนำจากอาจารย์ธนา อาจารย์ภาควิชาวิศกรรมศาสตร์คอมพิวเตอร์ Kmitl มา น่าสนใจมากครับท่านได้แนะนำลักษณะงานITหลายๆด้าน ว่าต้องมีความรู้ด้านใดเพื่อนำมาใช้งานจริง มีประโยชน์มาก เอามาแปะเฉพาะ สาย Developer นะครับ อยากอ่านสายงานIT ด้านอื่น ก็ข้ามไปดู Reference ด้านล่างเลยแล้วกัน

“สาย Developer ในสายนี้จะมีตำแหน่งงานเยอะมาก เพราะแนวโน้มด้านซอฟต์แวร์ของไทยถือว่าดีมาก ทุกคนคงเคยได้ยินว่าทางอินเดียมีชื่อเรื่องการพัฒนาซอฟต์แวร์มาก จนพัฒนามาอยู่ในอันดับต้น ๆ ของโลก แต่เนื่องจากงานซอฟต์แวร์ในอินเดียเริ่มบูมมาก ทำให้กำลังคนเริ่มขาด หลาย ๆ ทางจึงหันมามองที่ประเทศไทย เพราะประเทศไทยเป็นประเทศหนึ่งที่มีโครงสร้างดี มีกำลังคนอยู่พอสมควร และกำลังคนด้านนี้ของเราก็อยู่ในระดับที่ใช้งานได้ ปัจจุบันมีบริษัทซอฟต์แวร์เกิดขึ้นใหม่จำนวนมาก บริษัทที่เคยตั้งมานานก็มีการขยายงานอย่างมาก การรับสมัครในแต่ละปีของแต่ละบริษัทอยู่ในระดับหลักสิบ จนถึงหลายสิบคน โดยชื่อตำแหน่งอาจมีได้หลากหลาย เช่น System Analyst, Programmer, Business Analyst, Data Modeler, Software Architect และอื่น ๆ อีกเยอะแยะ ซึ่งที่ผ่าน ๆ มา เนื่องจากเราผลิตนักศึกษาออกไปเยอะ ก็ไปทำงานตามบริษัทเหล่านี้ ซึ่งส่วนใหญ่ก็ไปสร้างชื่อเสียงให้มาก จนเขาติดใจ (ขนาดบริษัทฝรั่งที่ผมเคยคุยด้วย ยังชอบเด็กลาดกระบังเลย) ในความขยัน ความรับผิดชอบ และความสามารถ ในปีต่อ ๆ มาเขาจะมารับที่เราก่อนเสมอ ซึ่งก็ต้องขอบคุณรุ่นพี่ ๆ ทั้งหลาย และพวกเราก็ควรจะรักษาชื่อเสียงอันนี้ไว้

ลักษณะงานที่ทำก็ตามที่ได้บอกไว้ คือ บางบริษัทจะทำซอฟต์แวร์ในลักษณะแพ็กเกจ คือ มีสเป็กของซอฟต์แวร์อยู่แล้วว่าต้องการซอฟต์แวร์สำหรับทำอะไร ซึ่งในเมื่อผู้พัฒนาเป็นผู้ออก Requirement เอง ปัญหาเรื่องของการผิดไปจาก Requirement จึงไม่ค่อยมี บริษัทในกลุ่มแรกนี้บางบริษัทจะทำซอฟต์แวร์ขายเอง แต่บางบริษัทก็รับช่วงต่อมาอีกทีหนึ่ง ปัญหาส่วนใหญ่ของบริษัทกลุ่มนี้ คือ เรื่องของการทำงานเป็นทีม การบริหารโครงการที่เป็นซอฟต์แวร์ เพราะซอฟต์แวร์มักมีขนาดใหญ่ และมีราคาแพง และที่สำคัญ คือ การทดสอบ วิชาที่สำคัญที่สุด ที่บริษัทกลุ่มนี้จะให้ความสนใจมากที่สุด คือ วิชา Software Engineering เพราะเป็นบริษัทที่จะใช้หลักการของ Software Engineering อย่างเข้มข้นมาก โดยบางบริษัทจะนำมาตรฐานทางซอฟต์แวร์มาใช้ เช่น CMM (http://www.sei.cmu.edu/cmm/) ดังนั้นคนที่ได้เกรดสูง ๆ ในวิชานี้จะได้เปรียบ

บริษัทอีกแบบคือ บริษัทที่ทำซอฟต์แวร์ตามสั่ง คือ ทำตามความต้องการของผู้ใช้ ดังนั้นงานก็จะเริ่มจากการไปหา Requirement จัดทำต้นแบบไปเสนอ และลงมือเขียนโปรแกรม โดยทั่วไปซอฟต์แวร์ที่ทำจะมีขนาดที่ไม่ใหญ่มาก เมื่อเทียบกับบริษัทในกลุ่มแรก เพราะงานของบริษัทในเมืองไทย จะไม่ค่อยซับซ้อนมาก สำหรับบริษัทที่ใหญ่เขาก็จะซื้อซอฟต์แวร์เมืองนอกมาใช้เลย พูดง่าย ๆ คือ มักเป็นบริษัทประเภท SMEซะมากกว่า วิชาที่มีความสำคัญของบริษัทกลุ่มนี้ คือ IS และ Software Eng.

นอกจากนั้นก็มีงานทำตามสั่งอีกแบบ คือ เป็นทีมงาน Software ประเภท In House คือ เขียนโปรแกรมให้บริษัทตัวเองใช้ ซึ่งบางบริษัทก็มีแค่ 2-3 คน แต่บางบริษัทก็เป็นทีมงานขนาดใหญ่เหมือนกัน งานในกลุ่มของ Inhouse นี้อาจมองว่าเหมือนกับก่อนหน้านี้ คือ ทำตามสั่ง แต่บางอย่างก็ไม่เหมือน เพราะเนื่องจากเป็นการทำงานในบริษัทของตัวเอง

การทำงานของบริษัทในกลุ่มนี้ บางบริษัทจะยืดหยุ่นเวลาทำงานค่อนข้างมาก คือ เลือกเวลาทำงานได้ เพราะการเขียนโปรแกรมมันไม่ต้องยุ่งกับใครมากนัก ขอให้ทำงานเสร็จเป็นพอ แต่บริษัทประเภท In House มักจะไม่ค่อยเป็นแบบนั้น เพราะเราเป็นคนส่วนน้อย จึงมักจะต้องมาทำงานตามคนอื่นเขา งานทางด้าน Developer นี้ส่วนใหญ่จะหนัก และเครียด เพราะเป็นงานที่ใช้สมองมาก โดยเฉพาะช่วงที่เร่งงานจะส่ง งานทางด้านนี้ เขามักจะให้เงินเดือนสูงพอควร แต่งานก็หนักสมเงินเดือนเหมือนกัน คนที่จะทำได้ดี คือ คนที่ชอบเขียนโปรแกรม ในการเลือกบริษัททำงาน ควรดูว่าบริษัทนั้นมีสิ่งให้เราได้เรียนรู้มากแค่ไหน เพราะคนที่จบใหม่ทั้งร้อย ก็จะต้องเริ่มต้นจากการเขียนโปรแกรม แล้วค่อย ๆ สั่งสมประสบการณ์ การออกแบบซอฟต์แวร์เป็นเรื่องที่ต้องอาศัยประสบการณ์ จากประสบการณ์ของผม พบว่าการเขียนโปรแกรมนั้น พอถึงระยะหนึ่งแล้ว จะเริ่มเบื่อ ผมคิดว่าคงมีคนจำนวนน้อยที่ชอบงานเขียนโปรแกรมอยู่ แม้จะมีอายุมากแล้ว ดังนั้นจึงควรหางานที่สร้างประสบการณ์ได้ดี คือ มีทีมงานที่มีประสบการณ์คอยสอนเรา มีการนำเอาหลักการด้านซอฟต์แวร์ต่าง ๆ มาใช้ เป็นบริษัทที่ใหญ่ มีเส้นทางการเติบโต หรืออย่ามองว่าเงินดี แต่ให้มองว่าเป็นงานที่มีความก้าวหน้าด้วย ซึ่งเมื่อถึงเวลาเราก็สามารถเขียนโปรแกรมน้อยลง มาคุมงานเป็น Project Leader ได้

สำหรับคนที่ไปทางซอฟต์แวร์ อยากให้มองทางการลงทุนตั้งบริษัทของตัวเองบ้าง เพราะเห็นหลาย ๆ คนเหมือนกันที่เคยอยู่บริษัท แต่พอสักพักเห็นช่องทางก็โดดออกมาลงทุนเอง เพราะงานซอฟต์แวร์มันใช้เงินไม่มาก

ในการรับสมัครงาน เขาจะดูวิชาหลัก ๆ และ Project เนื่องจากภาคคอมฯ ส่วนใหญ่ จะทำโครงงานเป็นซอฟต์แวร์ ซึ่งกว่าจะทำเสร็จก็คงจะเชี่ยวภาษานั้นไปเลย ดังนั้นเขาจะให้ความสนใจว่าคุณใช้ภาษาอะไรเขียน ถ้าเป็นภาษาที่เขาสนใจ ก็จะเป็นข้อได้เปรียบ ยิ่งถ้าแนวทางตรงกับความต้องการของเขายิ่งดีใหญ่ ในการรับสมัครเขาจะดูเกรดเฉลี่ย เกรดวิชาสำคัญ ๆ โครงงานที่ทำ บางบริษัทจะมีข้อสอบให้ทำ บางบริษัทให้ทำข้อสอบวัดลอจิก บางบริษัทให้ทำข้อสอบของภาษานั้น และความรู้เกี่ยวกับซอฟต์แวร์ การสัมภาษณ์อาจมีผลไม่มากนักในงานสายนี้ เพราะมันบอกอะไรไม่ได้จริง การสอบจะให้ผลดีกว่า ส่วนใหญ่เขาจะสัมภาษณ์เพื่อดูบุคลิกภาพ ลักษณะนิสัยมากกว่า อีกอย่าง คือ บริษัทใหญ่ ๆ เขาจะรับทีละเยอะ ๆ ดังนั้นจะมาคอยสัมภาษณ์มาก ๆ ไม่ได้

ปัจจุบันซอฟต์แวร์ที่มักเขียนกัน คือ มักเขียนด้วย JAVA มากที่สุด รองลงมา คือ VB, ASP, JSP มีพวก PHP หรือ C อยู่บ้าง และเนื่องจากงานส่วนใหญ่เป็นงานด้านฐานข้อมูล วิชา Database จึงเป็นวิชาที่มีความสำคัญมากอีกวิชาหนึ่ง โดยเฉพาะหากเวลาทำ Project มีการใช้ซอฟต์แวร์พวก ORACLE เนี่ยจะยิ่งดีใหญ่ และเนื่องจากแนวโน้มเกี่ยวกับ Web Service มาแรง คุณควรสนใจเรื่องพวกนี้เอาไว้ให้มาก หรือความรู้เกี่ยวกับ XML

และเนื่องจากซอฟต์แวร์ที่เขียนส่วนใหญ่เป็นเรื่องเกี่ยวกับธุรกิจ การมีมุมมองด้านธุรกิจ ความรู้รอบตัวเกี่ยวกับธุรกิจ เช่น เรื่องของ ERP, CRM หรือ อื่น ๆ น่าจะเป็นประโยชน์

ที่กล่าว ๆ มานี้ ถือว่าเป็นซอฟต์แวร์กระแสหลัก แต่อย่ามองข้ามซอฟต์แวร์กระแสรอง เช่น ซอฟต์แวร์บนมือถือ ซอฟต์แวร์เกม เพราะพวกนี้ในบ้านเราอาจมองว่าเพิ่งเริ่ม งานยังมีไม่มาก แต่มันก็ไม่แน่นะครับ เพราะกระแสด้านนี้ก็ถือว่ามาแรง ทำดี ๆ ก็มีโอกาสรุ่งได้เหมือนกัน”

Reference:สำหรับสายงานอื่นๆอ่านต่อที่นี่ครับ

Tags: ,

Get ค่า RadioButtonList ด้วย JavaScript

April 14th, 2009 | No Comments | Posted in .Net, c#, ในงาน

พอดีได้มีโอกาสได้แก้ตัว code Javascript ของเดิม
ในตัวอย่างนี้มี RadioButtonList โดยมีตัวเลือก ซึ่งเราต้องดึงค่าจาก ตัวเลือกที่ user เลือกมาทำงานต่อ
แต่ค่อนข้างจะมีปัญหา กว่าจะแก้ได้เล่นเอาหัวหมุน ต้องถามจากอาจารย์Google ก็เสียเวลามากมาย

<asp:RadioButtonList ID=”radFinTypeEditor” runat=”server” RepeatDirection=”Horizontal”>
       <asp:ListItem Selected=”True” Value=”Stock”>Stock</asp:ListItem>
       <asp:ListItem Value=”Bond”>Bond</asp:ListItem>
</asp:RadioButtonList>

ซึ่งFunction ที่ผม(พยายาม)สร้างขึ้นเพื่อGet ค่าที่ user ติ๊กเลือกจาก radiobutton นี้ 

function getCheckedRadio()
{
    var radioButtons = document.getElementsByName(“radFinTypeEditor”);
    for (var x = 0; x < radioButtons.length; x ++)
    {
        if (radioButtons[x].checked)       
        {
            alert(“You checked ” + radioButtons[x].id + ” which has the value ” + radioButtons[x].value);
        }
    }
}

ผลของการใช้ function นี้คือ เราจะได้ radioButtons.length มีค่าเป็น 0 (เพราะอะไรไม่ทราบ)ซึ่ง ทำให้ function นี้ไม่ work ….
ถ้าหากกำหนดแบบนี้…
 var radioButtons = document.getElementsById(“radFinTypeEditor”); จะได้ ค่า radioButtons เป็น null
เนื่องจากใน radioButtonList มีหลาย ListItem และแต่ละตัวมี Id ที่ต่างกันซึ่ง render ตาม sequence (ดูได้จาก MarkUp [ViewSource จาก page])
 

 คราวนี้ลองเปลี่ยนการกำหนด radioButton object เป็น document.getElementById(‘<%= radFinTypeEditor.ClientID %>’);
  Note: control.ClientID เป็นการ Get ค่า id ของ server control ที่ถูกกำหนดโดย ASP.NET
        โดยที่ ClientID ถูก gen โดยการต่อ Id ระหว่าง UniqueId ของ parent control นั้น กับ id ที่ gen โดยแยก id ด้วย _
       เช่น Stock : radFinTypeEditor_0
             Bond  : radFinTypeEditor_1
 
 

 function getRadioButtonListValues()
{
     var radioButtonListRef = document.getElementById(‘<%= radFinTypeEditor.ClientID %>’);
     for (var i=0; i<radioButtonListRef.rows.length; i++)   
     {       
           for (var j=0; j<radioButtonListRef.rows[i].cells.length; j++)
           {           
                var listControl = radioButtonListRef.rows[i].cells[j].childNodes[0];
                if(listControl.checked)
                {
                     if(j==0)
                     {
                          return ‘Stock’;
                     }
                     else 
                     {
                          return ‘Bond’;
                     }
                }
            }
     }
}

ได้มาจากคุณ NC01 ซึ่งปรากฎว่า Works! ซึ่งเป็นการในแต่ละ node หรือ แต่ละ option ว่า option ใดถูกติ๊กอยู่

Tags:

หยุดย้าวยาว

April 4th, 2009 | 1 Comment | Posted in นอกงาน, ฟรีสไตล์

นานๆจะมีวันหยุด 3วันติดซักที ต่อด้วยสงกรานต์อีก 5วัน โอ้ว!! สุโค้ย!!  

ปกติต้องหาอะไรเล่นทุกๆวันเสาร์ แต่อาทิตย์นี้ได้หนัง Bluray ชุดใหญ่!!! มาหลายเรื่อง
เลยเอามาดูซักหน่อย
เปิดด้วย BenQ S42 ก็สงสัย ทำไมมันกระตุกๆ … อ้อเปิดโหมด Power save อยู่
(รุ่นนี้มี Hybrid Power Technology เราสามารถสลับการใช้งานของ 2 การ์ดจอได้
ทำให้เวลาเล่นเกมก็up ให้เป็นโหมด High Performance)  
ผลออกมา….. ชัดกิ๊ก!!.. ไหลลื่น!!… เต็มตา!!…

พอดีมีหลายเรื่องเลือก The Matrix …มาดูครบ3ภาค ดูเสร็จตาแฉะ T_T
สงสัยว่าถ้าได้ดูจบทั้งหมด นอกจาก สายตา จะเสียแล้ว นิสัยตา อาจเสียตาม
และไม่ยอมดูหนัง VCD อีกต่อไปก็เป็นได้.. :)

ช่วงค่ำครึ้มฟ้าครึ้มฝนพี่จะพาไปกิน MK ที่ Big C พอออกจากบ้านฝนก็ตก
แต่ทั้งครอบครัวก็ยังลำบากลำบนนั่ง 3 ล้อไปอีก…มีรถเป็นของตัวเองก็ว่าไปอย่าง
…..พยายามจริงๆ – -’

ช่วงนี้[ตั้งแต่อาทิตย์ที่แล้ว] นั่งอ่านหนังสือ
พ่อรวยสอนปลุกอัจฉริยภาพทางการเงิน (RICH DAD’S:  Increase Your Financial IQ)
                          ”เรียนรู้การสร้างความรวยด้วยความฉลาดทางการเงิน”
อ่านแล้วได้แรงบันดาลใจอะไรดีๆหลายอย่าง…แต่ยังอ่านไม่จบเพราะนิสัยผลัดวันประกันพรุ่ง.. 
ว่
าแล้วก็อ่านต่อดีกว่า…

End.

Tags: , , ,