วันเสาร์ที่ ๑๓ สิงหาคม พ.ศ. ๒๕๕๔

ติวสอบชนิดข้อมูลพื้นฐาน (Value Types Tutorial)

เรื่องชนิดข้อมูลพื้นฐาน ผมเคยเขียนไว้แล้ว ที่ Value Types (1) : Built-in Types ซึ่งสามารถอ่านประกอบหรืออ้างอิงได้ครับ

ตัวอย่างข้อสอบ
จงเลือก data type ที่เหมาะสมกับเงื่อนไขข้อมูลต่อไปนี้
- ข้อมูลเป็นตัวเลข
- ข้อมูลมีค่ามากกว่า 32,767

ก. System.SByte
ข. System.String
ค. System.Int16
ง. UShort
ง. Char

อธิบายวิธีคิด
โจทย์ข้อนี้เป็นโจทย์ที่มีระดับความยากเพียง 1 ดาว โดยจะทดสอบความจำของเรา ใครจำได้ก็ไม่ต้องอ่านที่ผมอธิบายนะครับ

ข้อนี้เราอาจจะใช้เงื่อนไขมาตัดตัวเลือกให้ตัดสินใจง่ายขึ้น โดยเงื่อนไขแรกบอกว่า ต้องเก็บข้อมูลตัวเลขเท่านั้น ดังนั้น ข้อ ข. และข้อ ง. จึงควรตัดออก (คนศึกษาใหม่ๆ อาจจะคิดไปว่า String ก็เก็บเลขได้ ซึ่งต้องอธิบายว่าในคอมพิวเตอร์จะถือว่าตัวเลขที่เก็บแบบตัวหนังสือ จะไม่สามารถนำมาคำนวนได้ สำหรับมนุษย์จะฉลาด สามารถนำตัวเลขไม่ว่าจะอยู่ในรูปแบบไหน ก็สามารถนำมาคำนวนได้ เช่น 6 + สาม มนุษย์จะรู้ว่าคำตอบคืออะไร)

หลังจากตัดข้อที่ไม่ใช่ตัวเลขออกแล้ว ก็อยู่ที่ความจำของเราแล้ว โดยเทคนิคการจำของผมอันนี้เป็นวิธีของคนขี้เกียจจำอะไรเยอะๆ นะครับ แต่อาจจะคิดช้าหน่อย สำหรับเลขจำนวนเต็มผมจำแค่ 4 ตัวแล้วค่อยมาต่อยอดเอาครับ คือ Byte, Short, Integer, Long และผมจะจำไว้เสมอว่า Integer มีขนาด 32 bits แล้วค่อยรู้ขนาดของอีก 3 ตัวด้วยการลดหรือเพิ่มขนาดเป็น 2 เท่า ดังนั้น จะเรียงลำดับขนาด bits ได้แบบนี้

8 16 32 64
Byte Short Integer Long

ต่อไปเราต้องต้องคำนวนค่าที่แต่ละ data type เก็บได้มากที่สุด โดยนำ 2 มายกกำลังตามจำนวนบิตที่เราเขียนไว้ เริ่มจาก Byte ซึ่งค่าที่เก็บได้เท่ากับ 28 หรือ 256 นั้นคือ 0 ถึง 255 นั้นเอง ส่วน SByte นั้น S ข้างหน้า Byte ก็ย่อมาจากคำว่า sign หมายถึงเครื่องหมาย + หรือ - นั้นคือ กรณี SByte ต้องแบ่งครึ่ง เป็นลบและบวกอย่างละเท่าๆ กัน คือ อย่างละ 128 จะได้ -128 ถึง 127 (ฝั่งบวกรวม 0 ด้วยเลยเหลือ 127 นะครับ) จะเห็นว่าพอมาถึงตรงนี้ตัดข้อ ก. ออกได้ เพราะ System.SByte นั้นค่ามากที่สุด ยังห่างไกล 32,767 ครับ

ต่อมา Short ซึ่งเรารู้แล้วว่ามีขนาด 16 bits ถ้าเราลองสังเกตข้อ ค. จะเห็นว่า Int16 มีเลข 16 อยู่ นั้นก็หมายถึง Int16 มีขนาด 16 bits ครับ แสดงว่า Short และ System.Int16 มีขนาดเท่ากัน ส่วนการคำนวนค่าข้อมูลที่เก็บได้มากที่สุด ก็คำนวนโดยคิดเป็นเท่าตัวของ 8 bits ไม่ใช่เอา 256 x 2 นะครับ แต่หมายถึง 28 x 28 หรือ 256 x 256 ซึ่งเท่ากับ 65,536 แต่อย่าเพิ่งตอบข้อ ค. นะครับ เพราะ Short, Integer, Long จะมี UShort, UInteger, ULong คู่เสมอครับ โดย U ข้างหน้านั้น ย่อมาจาก unsign ซึ่งหมายถึง ไม่มีเครื่องหมาย หรือพูดง่ายๆว่า มีเฉพาะฝั่งบวกครับ ดังนั้น Short หรือ System.Int16 ต้องถูกแบ่งอย่างละครึ่งครึ่งละ 32,768 เป็นบวกลบ ซึ่งเท่ากับ -32,768 ถึง 32,767 ดูจากค่านี้แล้วทำให้เราต้องตัดข้อ ค. ออกครับ เพราะเงื่อนไขบอกว่าต้องมากกว่า 32,767 ไม่ใช่พอดีนะครับ

เหลือคำตอบเดียวคือ ข้อ ง. ซึ่งเป็นคำตอบแน่นอน แต่เพื่อความแน่ใจ เราลองมาตรวจคำตอบดูก่อนครับ โดยต่อจากที่เราคำนวนค่ามากที่สุดของ Short ไว้ ดังนั้น UShort ก็คือค่าที่มีเฉพาะฝั่งบวก นั้นคือ เอา 256 x 256 เท่ากับ 65,536 มาเลยก็ได้ นั้คือ 0 ถึง 65,535 (อย่าลืมลบ 1 เพราะรวมเลข 0 ด้วย) ซึ่งเป็นคำตอบเดียวที่เก็บตัวเลขมากกว่า 32,767 ได้ครับ

วิธีคิดแบบผม จะช่วยให้ไม่ต้องมานั่งจำชนิดข้อมูลมากมาย ส่วนข้อสอบ 70-536 ออกเกี่ยวกับ Value Types โดยตรงเพียงข้อเดียว

Technorati Tags: ,
 
del.icio.us Tags: ,

วันอาทิตย์ที่ ๑ พฤษภาคม พ.ศ. ๒๕๕๔

ข้อคิดจากภาพยนต์เรื่อง THOR สู่ความเป็น Open Source

วันนี้ไปดูหนังเรื่องทอร์มา เป็นหนัง action ที่มันส์อีกเรื่อง ซึ่งได้ข้อคิดเล็กน้อยว่า "คนเราจะเป็นผู้นำได้ ไม่ใช่ด้วยกำลัง หรือการทำลายล้างศัตรู แต่ด้วยความถ่อมตน และรักสันติ"

หลังจากดูหนังเสร็จ ผมกลับบ้านมาเล่นเน็ตต่อ แล้วก็เห็นข่าวเกี่ยวกับ open source ที่โจมตีซอฟท์แวร์ที่มีลิขสิทธิ์หรือซอฟท์แวร์เชิงการค้า ทำให้ผมคิดว่า เราอาจถูกปลูกฝังให้ก่อสงครามกับผู้ที่ไม่เห็นด้วยกับความคิดของเรามากเกินไปรึเปล่า ดูตัวอย่างได้จากปัญหาการเมืองในบ้านเรา ที่ทำให้คนไทยแตกแยก และรับไม่ได้กับคนที่คิดต่าง แม้คุณ Richard Stallman บิดาแห่ง GNU จะประกาศอย่างชัดเจนในเว็บด้วยข้อความตอนนึงว่า "...the enemy is proprietary (nonfree) software..." ใน Why Open Source misses the point of Free Software แต่ผมคิดว่าเราก็ควรนำความคิดของเค้ามาปรับใช้ในแบบวัฒนธรรมตะวันออก ซึ่งส่วนใหญ่จะเน้นความเข้ากันได้โดยเรียบง่ายและเป็นธรรมชาติครับ

ที่จริงมีหลายสิ่งที่ชาว open source ควรตั้งรับมากกว่ามองแค่ซอฟท์แวร์เชิงการค้า นั้นคือ มิตรเทียม หรือซอฟท์แวร์บางประเภทที่เกาะกระแส open source เพื่อผลประโยชน์ตัวเอง หรือเพื่อนำ open source ไปโจมตีศัตรูของเค้าอีกที นอกจากนี้ยังมีซอฟท์แวร์ที่มีลิขสิทธิ์แบบลูกครึ่ง คือมีลิขสิทธิ์เชิงการค้าอยู่ในตัวซอฟท์แวร์ ที่เรามักเข้าใจผิดว่าเป็น open source เต็มตัว จนมีเรื่องมีราวกับชาว open source เช่นในกรณี Orcle Java (Apache Harmony - google)  และ OpenOffice (LibreOffice) นี่ยังไม่รวมซอฟท์แวร์บางตัวที่บอกว่าเป็น open source แต่ทำตัวแบบ freeware คือ source code แทบนำมาแก้ไขต่อไม่ได้เลย

ที่เขียนมาทั้งหมด ผมไม่มีส่วนได้ส่วนเสียกับไมโครซอฟท์หรือต้องการจะโจมตี open source นะครับ แม้ผมจะเขียนบทความที่เกี่ยวกับ VB.NET แต่ผมก็ชอบ Python ผมชอบเรียนรู้เทคโนโลยีหลายๆ ด้าน และชอบที่จะบูรณาการมันเข้าด้วยกันมากกว่า ไม่เช่นนั้น ผมคงไม่ไปสอบ cert. ทั้ง Java และ .NET หรอกครับ

ผมจึงฝากข้อคิดให้ชาว open source ของเราว่า "ความสำเร็จของ Open Source ไม่ใช่อยู่ที่การฟาดฟันซอฟท์แวร์เชิงการค้า (proprietary software) แต่อยู่ที่ความเป็นมิตรและเข้ากันได้กับซอฟท์แวร์ทุกประเภท  เหมือนใจที่รักในเสรีภาพ"

"ตัวคุณ Open Source แล้วใจคุณ Open Mind หรือยัง"

แหล่งข้อมูล :
Thor (film)
Why Open Source misses the point of Free Software
Overview of the GNU System

วันพุธที่ ๑๙ มกราคม พ.ศ. ๒๕๕๔

การใช้งาน App.Config ใน WPF (Using App.Config in WPF)


หลังๆ มาผมเริ่มจะคุ้นเคยกับ XAML หลังจากปล้ำกับ Silverlight มาซักพัก ต้องใช้คำว่าปล้ำเลยนะครับ เพราะต้องเปลี่ยนแนวคิดไปเยอะเลย ต้องอ่านหนังสือแบบ step-by-step แล้วทำไปด้วยถึงจะเข้าใจ ตอนนี้เลยได้พยายามลองใช้ WPF ดูพบว่าถ้าได้รู้ xaml concept แล้ว จะเขียน Silverlight หรือ WPF ก็เหมือนๆ กัน ซึ่งผมว่าการเรียนรู้ XAML นี่คุ้มนะครับ เพราะนอกจาก WPF กับ Silverlight แล้ว ยังสามารถเอาไปใช้ทำ app บน Windows Phone 7 ได้ด้วย (ยิงปืนครั้งเดียว ได้นก 3 ตัว)

Windows Application (Desktop Application) ส่วนใหญ่แล้วต้องใช้ไฟล์ config มาเก็บค่าที่เกี่ยวการ setting ต่างๆ ของโปรแกรม ซึ่งรวมถึง WPF Application ด้วย โดยผมได้เก็บค่า config ไว้ที่


...
    
        
        ....
    


แต่เมื่อผมจะเรียกใช้คำสั่ง (สำหรับ .NET รุ่นใหม่ๆ)

System.Configuration.ConfigurationManager.AppSettings("...").ToString

เพื่อดึงค่าที่เก็บไว้ใน app.config กลับไม่มีให้ใช้ เลยไปค้นในเน็ตด้วย "WPF app.config" ก็ได้คำตอบในเว็บ Stack Overflow (เป็นเว็บบอร์ดที่ผมชอบมากๆ) ว่า WPF ไม่ได้มี System.Configuration เป็น default reference ถ้าจะใช้ class ConfigurationManager ให้ add reference เพิ่มเข้ามาเอง

ปล.ต่อไปผมจะเขียน blog เนื้อหาสั้นหน่อยนะครับ ถึงจะสามารถ publish บทความออกมาได้ เพราะมีเวลาและกำลังน้อยลงตามอายุครับ 555

แหล่งข้อมูล :
How to use a App.config file in WPF applications?