ทำความรู้ัจักกับ Revision Control System และ SVN

ทำความรู้จักกับ Revision Control System กันก่อน !

โดย Revision Control System ( หรือเรียกว่า Version control, Source control หรือ (source) code management (SCM) ก็ได้) คือ ซอฟต์แวร์ประยุกต์ที่มีความสามารถในการติดตาม และบันทึกประวัติการเปลี่ยนแปลงที่เกิด ขึ้นเกี่ยวกับการพัฒนาระบบใดระบบหนึ่ง ซึ่งมักจะเกี่ยวกับด้านซอฟต์แวร์ โดยจะบันทึกไว้ตลอดระยะเวลาของการพัฒนาซอฟต์แวร์ พร้อมทั้งระบุเวลาและรวบรวมรูปแบบที่เปลี่ยนแปลงไปทั้งหมดที่เกิดขึ้นตลอดเวลาของการพัฒนาด้วย

โดยหลักการของ Revision Control System ส่วนใหญ่มักใช้ Optimistic Technique ก็คือการให้ผู้ใช้หลาย ๆ คนสามารถเข้าถึง (Check out) (ซึ่งในที่นี้เราจะพูดถึง source code) อันเดียวกัน แต่ละผู้ใช้สามารถแก้ไขไฟล์ต่าง ๆ ที่ดาวน์โหลดมา และสามารถอัพโหลดไฟล์ (Check in/Commit) กลับเข้าสู่ Revision Control System โดยมันจะรับผิดชอบเรื่องการตรวจความขัดแย้งกันของข้อมูล (Conflict) ว่ามีใครแก้ไขไฟล์เดียวกันหรือไม่ ถ้ามีมันก็สามารถแสดงความแตกต่าง (Diff) ระหว่างไฟล์ และ/หรือทำการรวมไฟล์ (Merge) เข้าด้วยกันได้ แต่บางครั้งบาง Revision Control System ก็ใช้หลักการ Pessimistic Technique กล่าวคือเมื่อมีคนใดในทีมพัฒนาได้ทำการเข้าถึงและกำลังนำข้อมูลนั้นไปแก้ไข หรือเปลี่ยนแปลงคนอื่น ๆ ในทีมจะไม่มีสามารถเข้าถึงและทำการเปลี่ยนแปลงข้อมูลชุดนั้นได้จนกว่าคนที่นำไปแก้ไข หรือเปลี่ยนแปลงจะทำการอัพโหลดไฟล์กลับเข้าระบบดังเดิม แต่ระหว่างนั้นสามารถเข้าไปอ่านไฟล์นั้น ๆ ได้อย่างเดียว (แต่บางครั้ง Revision Control System บางยี่ห้อก็ไม่ยินยอมให้อ่านไฟล์ด้วย ขึ้นอยู่กับว่ายี่ห้อไหนจะนิยามการทำงานแบบ Pessimistic Technique เป็นแบบใด)

โดยการเก็บข้อมูลนั้นเราต้องมีการสร้างคลังข้อมูล (Repository) ซึ่งบางครั้งคลังข้อมูลนี้จะรองรับไฟล์แบบ ASCII และ Binary Files หรือไม่ขึ้นอยู่กับซอฟต์แวร์ Revision Control System จะรองรับหรือไม่ด้วย

ตัวอย่างเช่น เราพัฒนาซอฟต์แวร์ 1 ตัว โดยในทีมีคนร่วมพัฒนา 10 คน โดยทุกคนมีสิทธิ์ในการเข้ามาใช้ Revision System Control ได้หมด และในการพัฒนาซอฟต์แวร์ครั้งนี้มีไฟล์การพัฒนาอยู่หลายร้อนไฟล์ เมื่อมี 1 ในทีมพัฒนาชื่อ A ได้นำไฟล์ kernel.c ออกไป (Check out) ทำการแก้ไขเพื่อแก้ไขข้อผิดพลาด (Bug) เมื่อทำการแก้ไขเสร็จแล้วจึงนำกลับเข้าระบบ (Check in/Commit) ซึ่งทำกันเป็นปกติ โดยก่อนทำการนำกลับเข้าระบบมักจะมีการเขียนคำอธิบายไว้เสมอว่ามีการแปลงอะไรไปบ้าง (Log) แต่พอมีการแก้ไข interface.c โดยมีในทีมมีการทำการแก้ไขพร้อม ๆ กัน 2 คน ซึ่งได้แก่คนชื่อ B และชื่อ C โดยทำการนำไฟล์ interface.c มาแก้ไข  เมื่อ C นำไฟล์กลับเข้าระบบ จะทำได้ตามปกติ แต่พอ B จะนำกลับเข้าระบบจะมีการฟ้องว่าไฟล์ที่จะนำเข้าระบบเกิดความขัดแย้งของข้อมูล (Confilt) โดยทั่วไปแล้วจะทำการแสดงความแตกต่างก่อน (Diff) เพื่อดูว่าส่วนที่ตนเองแก้ไขไปนั้นมีส่วนใดที่ตรงกันหรือไม่ ถ้าไม่ตรงกันเลย และไม่มีผลกระทบกับระบบโดยรวม (เช่นแก้ไข function คนละตัวกัน) จะทำการ merge เข้าด้วยกันแล้วทำการนำเข้าระบบตามปกติ แต่ถ้ามีการแก้ไขแล้วเกิดความซ้ำซ้อนกัน มักจะทำการเปลี่ยนแปลงโค้ดโปรแกรมของตัวเองใหม่อีกครั้ง แล้วทำการนำเข้าระบบอีกครั้งนึง แต่บางครั้ง ส่วนใหญ่ถ้าไฟล์ที่เราแก้ไขนั้นเป็นไฟล์ระบบที่มีความหวั่นไหวต่อการเปลี่ยนแปลงก็มันจะ ปิดการนำไฟล์ออกมามากกว่า 1 คน (Lock) ก่อนเสมอ

โดยในบทความนี้เราจะพูดถึง SubVersioN (SVN) ซึ่งเป็น Open Source Application ที่ทำหน้าที่ Revision control ซึ่งได้รับความนิยมสูงมากตัวหนึ่ง โดยถูกสร้างขึ้นมาเพื่อทดแทนการทำงาน Concurrent Versions System (CVS) ที่เก่า, มีความสามารถจำกัด และใช้งานยาก (ผมจะไม่พูดถึง CVS มากนัก เพราะไม่ได้ใช้งานจริง)

ความสามารถคราว ๆ ที่มีมาใน SubVersioN (SVN) มีดังต่อไปนี้

  1. เป็น Revision Control System แบบ Optimistic Technique
  2. การ Check in/Commit จะเป็นแบบ Atomicity แบบเดียวกับ Database Management System (DBMS) ทั่ว ๆ ไป 
    * Atomicity เป็นหนึ่งในกฎ ACID (Atomicity, Consistency, Isolation and Durableness) ของ DBMS ที่รองรับการทำ Concurrency ซึ่งมีคำจำกัดความว่า "กลุ่มคำสั่งงานใดๆ ต้องได้รับการประมวลผลทุกคำสั่งงานทั้งหมดถ้าไม่มีข้อผิดพลาด  หรือไม่ได้รับการประมวลผลเลยถ้ามีข้อผิดพลาดเกิดขึ้น" กล่าวคือผู้ใช้งานไม่ต้องกังวลผลของการดำเนินงานที่ไม่สำเร็จ เนื่องจากส่วนจัดการการดำเนินงานจะทำการยกเลิกหรือทำซ้ำให้ผลลัพธ์ถูกต้อง ตัวอย่างเช่น รายการเบิกเงินจากตู้เบิกเงินอัตโนมัติที่ยังทำไม่สำเร็จเนื่องจากระบบเกิดขัดข้อง ส่วนจัดการการดำเนินงานจะยกเลิกรายงานเบิกเงินครั้งนั้น โดยปรับค่ายอดเงินคงเหลือกลับไปค่าเดิม เสมือนหนึ่งไม่มีการทำรายการเบิกเงินครั้งนั้นเลย เป็นต้น
  3. หมายเลขการเปลี่ยนแปลง (Revision number) เป็นแบบส่วนรวม กล่าวคือใช้หมายเลขการเปลี่ยนแปลงร่วมกันทั้งระบบ เพื่อง่ายต่อการจัดการและกันการสับสนของการเปลี่ยนแปลง
  4. สามารถเปลี่ยนชื่อ, คัดลอก, ตัด และลบไฟล์ โดยมีผลกับหมายเลขการเปลี่ยนแปลงหลักทั้งหมด
  5. รองรับไฟล์แบบ Binary files 
  6. รองรับ Apache HTTP server บนโปรโตคอล WebDAV/DeltaV โดยสามารถนำมาใช้ผ่านโปรโตคอลแบบ TCP/IP ได้ทำให้ลดปัญหาโดน Firewall ในเครือข่ายไม่ยินยอมให้ผ่านได้อีกด้วย โดยใช้ Apache HTTP server โดยผ่าน port 80 ซึ่งมักจะได้รับการยินยอมให้กระทำผ่าน Firewall ได้อยู่แล้ว
  7. รองรับการทำ Branching (Branches) และ Tagging (Tags)
  8. สามารถ Locking ในกรณีที่ต้องการเปลี่ยนแปลงข้อมูลระดับเข้มงวด (เช่นไฟล์ที่มีผลกับระบบมาก ๆ มักทำการ lock ไว้ก่อน เพื่อป้องกันการ merge ไฟล์แล้วมีข้อผิดพลาดใหม่ ๆ หรือข้อมูลนั้นไม่เหมาะให้มีการแก้ไขหลาย ๆ คนในเวลาเดียวกัน)
  9. รองรับ MIME เต็มรูปแบบ
  10. เป็น Open Source licensed ในชื่อ "CollabNet/Tigris.org Apache-style license"

ครั้งต่อไปเราจะมาทำการติดตั้ง SVN Server บน Windows ภายใน 10 นาทีกันนะครับ ;)

อ้างอิง

 

งามหน้าไหมเนี่ย

จาก รมว. ICT คนใหม่กับวิสัยทัศน์ต่อโอเพ่นซอร์ส ทำให้เกิดกระแสต่าง ๆ ด้านลบอย่างมากในตัว รมว. ในรัฐบาลชุดเฉพาะกิจชุดนี้ แม้จะเป็นรัฐบาลที่มาทำงานเพียงแค่ 1 ปี (หวังไว้อย่างนั้น) แต่การที่ท่านออกมาแสดงวิสัยทัศน์ที่หักดิบ และรุนแรงมากต่อกระแสการพัฒนาซอฟต์แวร์โอเพ่นซอร์ส ออกแนวพูดไม่คิด (และคาดว่าคงไม่ได้คิดอีกหลายอย่างแน่ ๆ ) ข่าวนั้นเร็วมากจนถึงขนาดเข้าเว็บ Digg และ Slashdot ตามไปอ่านได้

ข่าวต้นเรื่อง – U-TURN AT ICT MINISTRY
Digg – Open-Source condemned by Thai Minister
Slashdot –  Thai IT Minister Slams Open Source

คราวนี้หล่ะ ซวยหล่ะท่าน เตรียมตัวแก้ตัวกันไป -_-‘

แต่ที่แน่ ๆ เว็บ Digg กับ Slashdot จะโดน favicon.ico หรือเปล่าหว่า T_T ถ้าพรุ่งนี้เข้าไม่ได้ก็ทำใจได้เลยนะท่าน ๆ ทั้งหลาย

Update[1] จดหมายเปิดผนึก ถึง รมว. กระทรวง ICT


Update[2]

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

เว็บ Digg เป็นเว็บ social bookmarking และ blog bookmarking ที่ใหญ่มาก และมีข่าวที่เร็วกว่า Google News มาก (จากผลการวิจัยของสำนักข่าวแห่งหนึ่ง)

เว็บ Slashdot ( หรือสั้นว่า /. )เว็บรวมข่าวสารต่าง ๆ ที่มี Technology Geek ต่าง ๆ มากมาย มาร่วมกันแชร์ความรู้และแสดงความคิดเห็นอย่างเปิดกว้าง ซึ่งน่าจะใหญ่ที่สุดในโลกแล้ว

ส่วน Blognone เว็บรวม Technology Geek ที่ใหญ่ที่สุดในไทย (ณ.ตอนนี้คงถือว่าใหญ่มาก) โดยผู้ ร่าง "จดหมายเปิดผนึก ถึง รมว. กระทรวง ICT" คือคุณ thep ก็เป็นหนึ่งในผู้ผลักดัน OpenSource ในไทย และอยู่ในทีมพัฒนาระบบภาษาไทยใน linux ด้วย

ส่วนตอนนี้เว็บ Exteen เว็บ Blog Provider ที่ใหญ่ที่สุดในไทย ก็มีการแสดงความคิดเห็นใน Blog อย่างกว้างขวางมาก

นี่ยังไม่รวม IT Geek อื่น ๆ ในไทยอีกหลายเว็บ ที่เริ่มเอาข่าวนี้ไปเผยแพร่กันแล้ว ซึ่งรวมไปถึงเว็บบอร์ดที่ใหญ่ที่สุดในไทยอย่าง Pantip.com ที่มีการแสดงความคิดเห็นกันอย่างมากมายในหลาย ๆ ห้อง

โดยวิสัยทัศน์นี้ทำให้มีผลกระทบต่อสังคม OpenSource ในไทยอย่างมาก

คงต้องรอดูกันต่อไป ว่าจะมีอะไรเกิดขึ้น

 

กำลังบ้า Ruby on Rails ภาค MVC

เพิ่งแก้ Blog จากการใช้ Category มาเป็น Tag แทนด้วยเหตุผลที่ว่ามันทำให้การค้นหาและจัดหมู่นั้นทำได้ง่ายกว่ามาก ซึ่งช่วงนี้กำลังหาสิ่งใหม่ ๆ เข้าตัว เริ่มด้วยการศึกษาหลักการ Design Pattern ต่าง ๆ ของ GoF และ Model-view-controller (MVC) ที่เป็น Design Pattern อีกแบบหนึ่งที่ได้รับความนิยมมาก โดยตัวที่เอาประกอบการศึกษาก็คือ Ruby on Rails (RoR) ซึ่งเป็นการใช้ภาษา Ruby มาเป็นภาษาในการพัฒนาและทำเป็น Framework ที่ชื่อว่า Rails นั้นเอง โดยรวมยังไปไม่ถึงไหน แต่ที่แน่ ๆ การพัฒนาทำได้รวดเร็วและง่ายมาก ๆ แต่สิ่งหนึ่งที่ต้องเข้าใจคือ MVC เสียก่อน เพราะไม่งั้นพัฒนาไปแล้ว งง แน่ ๆ

Model-view-controller (MVC) เป็นการแยกการพัฒนา Software ออกมาเป็น 3 ส่วนหลัก ๆ  (หรือบางคนเรียกกว่า 3 Layer) ซึ่งได้แก่ Model, View และ Controller

  • Model เป็นการตัดสินใจ (Domain logic) ในการเข้าถึงและใช้งานข้อมูล (Raw data) ซึ่งเป็นไปตามกฎที่ตั้งไว้ (Business Rule) 
  • View เป็นส่วนของการนำข้อมูลที่ได้จาก Model มาแสดงผลให้ผู้ใช้ได้ทราบข้อมูลผ่านทางส่วนติดต่อกับผู้ใช้งาน (User Interface,UI)
  • Controller เป็นส่วนที่ตอบรับและโต้ตอบการทำงานของผู้ใช้ (Event และ Responds) โดยจะเป็นตัวกระตุ้นให้ Model และ View ทำงานไปในทิศทางเดียวกัน

ขั้นตอนการทำงานของ MVC แบบคราว ๆ

เหตุการณ์สมมติ "นักเรียนต้องการส่งคำตอบในการทำข้อสอบให้กับครูผู้สอน" การทำงานแบบ MVC จะมีลักษณะดังนี้

  1. เมื่อนักเรียนกดปุ่ม Submit เพื่อส่งข้อสอบ ซึ่งอยู่ที่ View จะส่งคำร้องนี้ไปยัง Controller (1) จะทำการรับการโต้ตอบจากปุ่ม Submit และสร้าง handler หรือ callback ขึ้นมา เพื่อใช้ติดต่อระหว่าง Layer
  2. Controller ทำการเลือก Model ที่ตรงกับข้อมูลของผู้ใช้ที่ส่งข้อมูลเข้ามา (2) แล้ว Model ทำการตรวจสอบความถูกต้องของข้อมูลตามกฎที่ตั้งไว้ (Business Rules) ถ้ามีข้อผิดพลาดจะส่งคำร้องไปยัง View (5) ให้ทำการสร้างหน้าแจ้งข้อผิดพลาดออกมาและจบการทำงานทันที แต่ถ้าไม่มีข้อผิดพลาดจะใส่ข้อมูลนั้นลงฐานข้อมูล โดยที่ Model จะเป็นคนจัดการข้อมูลในฐานข้อมูลเองทั้งหมด (3) แล้ว Controller จะบอกให้ View (4) จะทำการสร้างส่วนติดต่อกับผู้ใช้ใหม่ขึ้นมาโดยไปดึงผลคะแนนที่ได้มาจาก Model (5) ออกมาแสดงที่ส่วนติดต่อผู้ใช้งาน (User Interface,UI)
  3. และการทำงานจะเป็นแบบไหนไปเรื่อย ๆ จนกว่าโปรแกรมจะจบการทำงาน

จากตัวอย่างด้านบนคงจะพอเห็นภาพแล้วว่าการติดต่อระหว่าง Model, View และ Controller แล้ว เมื่อเราสามารถแยกการทำงานของโปรแกรมของเราได้ในรูปแบบนี้ จะทำให้การดูแลและแก้ไขระบบเป็นไปด้วยความรวดเร็ว และลดความซับซ้อนในการสร้างลงไปมาเลยทีเดียว

ซึ่งในการเขียน RoR นั้นก็ใช้หลักการแบบนี้เช่นกัน และตัว Framework เองนั้นออกแบบมาให้มีความสามาถในการสร้างงานที่สูงมาก (High Productivity) กล่าวคือเราไม่จำเป็นต้องออกแบบฟอร์มเองทั้งหมด แต่ตัว Framework จะออกแบบมาให้แล้ว และเรามาปรับแต่งฟอร์มทีหลัง โดยตัวฟอร์มจะมีความสอดคล้องกับข้อมูลที่ออกแบบใน Database มากที่สุด แถมด้วยระบบตรวจสอบข้อมูลในฟอร์มแบบซึ่งสามารถปรับแต่งแก้ไขได้ง่ายมาก ๆ

สำหรับตอนนี้ก็คงต้องกลับไปนั่งเล่นกับมันก่อน เดี่ยวมาเล่าต่อครับ ;)

 

เพิ่งไปอบรม SCJP @ CSIT-NU (สนับสนุนโดย SIPA สาขาเชียงใหม่)

ในช่วง 4-5 วันที่ผ่านมาไม่ได้ทำอะไรเลย งานการไม่ได้ทำ เพราะเอาเวลาไปอบรม Sun Certified Java Programmer (SCJP) ซึ่งในวันจันทร์ที่ผ่านมา (วันที่ 16 ตุลาคม 49) เป็นวันทดสอบ Pre-Test เพื่อลองเชิงว่ามีคุณสมบัติพอที่จะสอบหรือไม่ โดยมีคำถาม 15 ข้อ ทำให้ได้ไม่ต่ำกว่า 8 ข้อก็ผ่านแล้ว โดยตัวข้อสอบที่ให้ทำเป็นการไล่ตัว code ของโปรแกรมที่เขียนด้วยภาษา Java ทั้งหมดเลย โดยให้ตอบว่าผลการทำงานจะออกมาเป็นอะไร ซึ่งตัวข้อสอบไม่ได้ให้หาผลอย่างเดียว แต่ยังมีข้อให้เลือกว่ามันจะมี Compilation Fails หรือ Runtime Error หรือไม่ด้วย ซึ่งทั้งสองแบบก็มีอยู่หลายข้อเหมือนกัน

โดยในวันนั้นใช้เวลาสอบไม่เกิน 30 นาที ซึ่งถือว่าเวลาน้อยสำหรับคนที่นั่งไล่โปรแกรม เพราะแต่ละข้อนั้นกว่าจะไล่ตัวโปรแกรมเสร็จก็ปาไป 2-3 นาทีต่อข้อแล้ว แถมบางข้อยาวเสียด้วย ซึ่งการสอบเราต้องทำตัวเป็น compiler เพื่อจับผิดตัว code โปรแกรมต่าง ๆ ซึ่งสอบเสร็จก็ทำถูกไปได้ 13 ข้อ ส่วนอีก 2 ข้อเนี่ยมั่วไป แบบว่าตอนนั้นเวลามันไม่ทันแล้วต้องส่งแล้วด้วย แต่ดันมั่วไม่ถูกอีก เซง ๆ (ตอนตรวจเสร็จแล้วขอดูได้ว่าเราผิดข้อไหนด้วย)

ซึ่งเราก็ผ่านการทำสอบ Pre-Test เราเลยมีสิทธิ์ในการเข้าอบรมโดยเค้าจะมีเอกสารและมีวิทยากรมาอบรมให้ โดยวิทยากรที่มาอบรมก็เป็นคนที่สอบ SCJP มาก่อนเป็นรุ่นแรก ๆ และทำงานสายนี้มาก่อนอยู่แล้ว ซึ่งสอนได้ดี และละเอียด รวมถึงเป็นกันเองมาก เลยหล่ะ โดยอบรมให้เราเป็นเวลา 5 วัน ตั้งแต่เวลา 9.00 – 16.00 (ไม่รวมพักเที่ยง)  ซึ่งถือว่าทรหดมาก แต่โดยรวมก็มันดี ได้แนวคิดในการเขียนของ Java มาเยอะ และทำให้เรารู้ว่าภาษา Java นี่มันมีความหยุ่มหยิ่มในการเขียนมาก แถมใช้ความเคยชินจาก C/C++ มาเขียนบางครั้งก็ไม่ได้ด้วย
โดยในการอธิบายกลไกการจัดการ Object ใน Java แล้วก็อึ้ง ๆ อยู่ในหลาย ๆ เรื่องคือเรื่องของ String Pool หรือพวกระบบการสร้าง Object ของมันที่สลับซับซ้อนมาก แถมในตัวข้อสอบที่จะต้องไปสอบมันมีถามด้วยดิว่าเราเขียนโปรแกรมมาแบบนั้นแบบนี้ มันสร้าง Object มากี่ตัว หรือสร้าง Refference variable มากี่ตัว อะไรแบบนี้ ซึ่งมันดูเหมือนไม่มีประโยชน์ในการเขียนโปรแกรม แต่ถ้าลองใช้ลึก ๆ แล้วน่าจะทำให้เราจัดการหน่วยความจำได้ดีมากขึ้น ซึ่งการอบรมนั้นมีหัวข้อหลัก ๆ ดังนี้

  • Java Platform Architecture
  • Declarations, Initialization and Scoping
  • Flow Control (if or switch statement, loops and iterators, assertions, exceptions and exception handling , etc)
  • API Contents (Primitive wrapper classes, String VS StringBuffer, etc )
  • Concurrency (Thread and Runnable)
  • OO Concepts (encapsulation, access modifiers, inheritance superclass, overridden, overloaded ,is-a" and/or "has-a" relationships, polymorphism, etc)
  • Collections / Generics (hashCode and equals, Data Structure, etc )
  • Garbage collection
  • Fundamentals (primitive data types, arithmetic operators, access modifiers, package declarations, and import statements, etc )

จริง ๆ มันมีมากกว่านี้ครับ แต่เอาย่อ ๆ ประมาณนี้แล้วกัน โดยรวมทำให้เรารู้เลยว่าการทำงานของ Garbage collector ใน Java นี่มันเป็นไปตามใจของ JVM จริง ๆ คิดจากที่ได้อบรมมา เรื่องการเอา Object ที่ไม่ได้ถูกใช้งานแล้วออกจากหน่วยความจำนี่บังคับไม่ได้เลย คือแล้วแต่อารมณ์ของ JVM มาก ๆ คือ Object ไม่ได้ถูกอ้างถึงอีก มันก็ยังคงลอยหน้าลอยตาอยู่ในหน่วยความจำ Garbage collector มันก็มองว่า Object นั้นเข้าข่ายที่จะถูกลบไปได้ แต่มันจะลบหรือไม่ก็อีกเรื่อง แถม Garbage collector เนี่ยมันจะทำงานเมื่อไหร่ก็ไม่รู้ -_-‘ เราไปปลุกมันก็ไม่ได้ ได้แต่ร้องขอไป ถ้ามันอยากทำงานเดี่ยวมันก็ทำงานเอง ถ้ามันไม่ทำ ก็คือไม่ทำ (ใครจะทำไม) เป็นซะอย่างงี้อีก ไม่รู้ว่า 1.6 มันจะเป็นแบบนี้หรือเปล่านะ โดยรวมนี่ก็อึ้ง ๆ มึนๆ กับเรื่องนี้มาก เดี่ยวว่าจะหาอ่านเรื่อง Garbage collection ทบทวนน่าจะ ok ไม่รู้ว่าภาษาอื่น ๆ มันเป็นแบบนี้หรือเปล่า -_-‘

ส่วนต่อมาก็เรื่องของ Data type ที่ในภาษา Java นี่ stric มาก จนน่ารำคาญอย่างแรง คืออย่างเราเอา ข้อมูลที่เป็นชนิด short กับ short มาบวกกันมันออกมาเป็น integer ซะอย่างงั้นอ่ะ นี่ยังไม่รวม byte อีกนะ เออ ก็แปลงดี ต้อง casting กันให้วุ่นวายไปหมด แถมในการสอบก็มีให้เห็นกันแบบนี้อีก แถมมีการเอาชนิดข้อมูล char มาใช้เป็นตัวเลขได้ด้วย โดยไม่ต้อง casting อีก โอ้วววว สับสนใช้ได้เลย เรื่องของพวก Data type นี่เป็นอะไรที่สับสนงงงวงมาก แถมการประกาศ String s = "xyz"; กับ String s = new String("xyz"); นี่ได้ Object ไม่เท่ากัน ด้วย แบบแรกจะได้ String pool 1 ตัว โดยมี s เป็น reference 1 ตัว ซึ่งมันชี้ไปที่ String Pool แต่ในแบบที่สอง มี Object 1 ตัว และ String pool 1 ตัว โดยมี s เป็น reference อีก 1 ตัว โดยที่มันจะไปชี้ Object แล้ว Object จะชี้ไปที่ String pool อีกที (เราต้องมองว่า String pool คือ 1 ตัวคือ 1 Object ด้วยนะ) ซึ่งนี่แหละทำให้ งง กันไปพักนึง โดย String pool ใน Java นี่เป็นเหมือน Database สำหรับเก็บ String ที่สร้างขึ้นมา โดยที่ String ที่สร้างขึ้นนี้จะไม่มีทางถูกแก้ไขอีกถ้าสร้างมาแล้ว แถมถ้าไอ้ตัวที่สร้างมาแล้วมีตัวที่เหมือนกันจะสร้างซ้ำ มันก็จะไม่ให้สร้างซ้ำมันจะเอา reference ที่จะสร้างซ้ำนั้นน่ะมาชี้มาที่ String pool index ที่ซ้ำกันอยู่ทำให้ข้อมูลของ String 1 pool มี reference variable 2 ตัวชี้มาที่เดียวกัน เพื่อลดการใช้งานหน่วยความจำ แต่ถ้าใครอยากได้ String แบบที่เปลี่ยนแปลงค่าได้ก็ต้องใช้ StringBuffer แทน

เฮ้อ ….. นี่แค่เรื่องเล็ก ๆ ในช่วง 4-5 วันที่ได้อบรมนะ เดี่ยวจะมาเล่าต่อว่ามีอะไรอีกบ้าง ;)

 

เตรียมตัวรับการเปลี่ยนแปลง ในการเขียนโปรแกรมบน Windows Vista

หายไปนานเนื่องจากสอบ และปั่นงานให้มี performance สูงที่สุดเท่าที่จะทำได้ T_T กะว่าถ้าเสร็จแล้วจะมาอัพ blog สัก 6-7 เรื่องเลย แต่ว่าตอนนี้เอานี่ไปก่อนแล้วกัน ชิมลางไปก่อน

โดยที่เมื่อเช้านี้ได้อีเมลจากข่าวสารจาก CodeProject (Forum หรือเว็บที่น่าจะเป็น Partner ของ  Microsoft Developer Network) ให้ลองเข้าไปอ่าน Windows Vista User Experience Guidelines หรือเอกสารประกอบการออกแบบ User interface ของ Windows Vista ซึ่งเป็น Windows ตัวใหม่ของ Microsoft สามารถอ่านได้ที่ http://msdn.microsoft.com/library/?url=/library/en-us/UxGuide/UXGuide/Home.asp โดยตัวเอกสารยังคงไม่เสร็จดี แต่ก็คงเติมใส่ลงไปเรื่อย ๆ ให้ทันสมัยต่อไปเรื่อย ๆ โดยรวมน่าจะทำเพื่อให้การออกแบบ ส่วนติดต่อกับผู้ใช้นั้นเป็นไปในแนวทางที่ดี และทำให้โปรแกรมที่ทำงานบน Windows Vista นั้นใช้งานได้ง่ายขึ้น รวมไปถึงทำให้มันดูเป็นชิ้นเดียวกัน แน่ๆ และอาจรวมไปถึงการเล่น Themes ของระบบที่ทำให้โปรแกรมของเรานั้นสามารถทำงานกับ Themes ของระบบได้ดีขึ้นด้วย

โดยเตรียมตัวไว้ก่อนน่าจะดีกว่า พอ Windows ตัวใหม่ออกมาใครพัฒนาโปรแกรมตัวใหม่จะได้รองรับอนาคตได้พอดี (เห็นว่าเปลี่ยนแปลงไปเยอะเลย) แนะนำว่าให้ลองโหลด Microsoft .NET 3.0 Beta (WinFX) มาลองเล่นด้วยก็ดีนะ

ส่วนในตอนนี้ Windows Vista ออกรุ่นทดสอบถึง RC2 แล้วคาดว่าจะ RTM ได้ในอีกไม่กี่เดือนนี้ แต่ bug ในรุ่น RC1 และ Beta นั้นมีรายงานว่าเยอะระดับหลักพันเลยทีเดียว -_-‘ ใครจะลอง RC2 ถ้ามี error ก็ send error ส่งให้ Microsoft ด้วยนะ ;) ไปหล่ะ

โพสสักพักไปอ่านข่าวที ่Blognone แล้วเจอเรื่องคล้ายๆ กันพอดี Windows Vista RC2