14 ธันวาคม 2557

Run Software windows บน Ubuntu ด้วย wine

การใช้งาน Ubuntu หรือ Linux อื่นๆ มักจะมีปัญหาว่า โปรแกรมหลายโปรแกรมสามารถทำงานได้แค่บน windows วันนี้ผมจะมาเสนอวิธีแก้ (อาจจะได้บางส่วน)
รู้จักกับ WINE  wine ความหมายจากเว็บหลักคือ "Wine Is Not an Emulator" (เล่นเอา Orz) ก็ตามนั้นคือ wine ไม่ได้จัดสภาพแวดล้อมในลักษณะ simulator แต่จะแปลง API ของ windows ให้สามารถใช้กับ POSIX ได้ ซึ่งทำให้ตระกูลนี้ (Linux MAC_OS BSD) สามารถใช้งานได้
การลง wine ใน Ubuntu สามารถลงผ่าน Software center ได้เลย โดยพิมพ์ค้นหามุมขวาบนว่า "wine" ก็จะเจอเลย 

เมื่อลงเสร็จแล้วก็สามารถ run program ได้เลยโดย  Double Click ที่ exe file ได้เลย
ตัวอย่าง Notepad++
แล้วเราสามารถเลือก ไฟล์ DLL เพิ่มเติมได้อีกผ่านทาง winetricks
โดยเปิด Terminal แล้ว พิมพ์คำสั่ง winetricks
จะได้หน้าต่างนี้
เลือก select default ...

และเลือก Install DLL component
แล้วเลือก ที่เราต้องการ ไม่ว่าจะเป็น DirecX  Dotnet Framwork(อันนี้ลองแล้วไม่ค่อย work)

โดยจากการที่ต้องแปลง API นี้จึงทำให้เราต้องดูเองว่าโปรแกรมที่เราต้องการใช้นั้นต้องทำอะไรเพิ่มเติมบ้างนอกจากใช้ wine แล้ว(ซึ่งจุดนี้ต้องดูกันเองนะ)ตาม Link นี้ https://appdb.winehq.org/ ใน Link นี้สามารถค้นหาโปรแกรมที่เราต้องการได้เลย

เพิ่มเติม : https://www.winehq.org/
ตัวอย่างข้อมูลเพิ่มเติมเกม WOT ใน wine https://appdb.winehq.org/objectManager.php?sClass=version&iId=30818 ปล. ผมยังไม่เคยลองเกมนี้นะ

6 ธันวาคม 2557

มารู้จัก Continuous Integration กัน

จากปัญหาในการพัฒนา software ตอนที่ผมเรียนอยู่ซึ่งโอกาสล้มเหลวสูง ว่าง่ายๆคือ ที่ผมทำสมัยเรียนไม่มีชิ้นไหนเป็นผลิตภัณฑ์ได้เลย (ปล.รู้สึกผิดกับเพื่อนและอาจารย์ในทีมพัฒนาจริงๆ) จนผมมีความรู้สึกว่าต้องมีวิธีที่ทำให้แม่นยำขึ้นกว่าเดิม เรื่องนี้ต้องเท้าความถึงวิชาที่ผมไม่ได้ชื่นชอบอะไรเลยอย่าง Software Engineering ผมก็ดูมันแบบผ่านๆมา จนกระทั้งมีคนแนะนำให้กลับไปดู ตอนนี้หละ ผมเห็นอะไรที่มันดูใช้งานได้จริงๆไม่ได้เอาทฤษฎีมาเล่น
Continuous integration (CI) ที่ผมรู้จักมานานนี้อยู่ในส่วนของ Agile process ซึ่งได้เรียนมาหลายปีแล้ว (Orz เพิ่งรู้จักมัน) แต่ขอละ Agile ไว้ก่อน
CI นั้นมีหน้าที่แสดงหน้าตาผลงานที่เราได้เขียนแบบอัตโนมัต โดยอาศัยหลักการที่ว่าจะมีการ Build Software อย่างต่อเนื่องในการทำงาน ซึ่งการ Build นี่แหละจะทำให้เราเห็นหน้าตาของ Software ที่เรากำลังทำอยู่โดยนอกจากจะได้ Software แล้วยังสามารถช่วยทดสอบ Software ของเราให้ด้วยเมื่อทำการทดสอบแล้วก็ทำการรายงานผลให้กับ dev ด้วย เป็นไงเหมือนมี Tester เพิ่มอีกคน (LOL) อย่าเพิ่งเซ็งเพราะมันหมายความว่าเป็นการป้องกัน Bug ไม่ให้หลุดจาก Dev. (มากเกินไป) นี่เอง win มั้ยหละ และถ้าเป็น Agile ก็อาจจะไม่จะเป็นต้องมี tester โดยตำแหน่งเลย (Tester จะปนไปกับ Dev.) โดยเมื่อรู้ผลแล้วก็ต้องแก้ให้เร็วที่สุด เมื่อแก้ผ่านเราก็จะได้ Software ตัวน้อยๆ ที่ทำงานได้ในระดับหนึ่ง(ฟังก์ชันยังไม่ครบ) ส่วนจะเริ่มเขียนยังไงที่ทำให้ใช้ CI ได้นี้จะยกไปหัวข้ออื่นนะครับ
รูปที่ผมสรุปตามความเข้าใจของตัวเองนะครับ

จากรูปคือการทำงานในหนึ่งช่วงเวลา(แล้วแต่ อาจจะหลักชั่วโมงหรือเป็นวัน) โดยส่วน CI ที่เป็นเครื่องมือใว้ไช้ในกระบวนการมีอยู่สองส่วน คือ ส่วน Test จะสามารถใช้หลักการ TDD Test-driven development และประกอบกับ CI Server ซึ่งทำหน้าที่ Build และ report ให้ Dev โดยเครื่องมือ CI นี้มีหลายตัวได้แก่... ไม่บอกผมขอละไว้เพราะเยอะพอสมควร ลอง Google ดู "continuous integration tools"ส่วนอื่น feature กับ code คนเป็น Dev. คงรู้อยู่แล้ว และอีกส่วนที่อาจจะมองไม่เห็นคือ Software version control เช่น CVS git bazaar ซึ่งส่วนนี้มองเป็นส่วนไว้ช่วยจัดการ Code ก็ได้
สรุป จุดประสงค์การทำ CI
-เพื่อให้ได้ Software ที่ทำงานได้ในระดับหนึ่งอยู่ตลอดเวลา
-เพื่อตรวจสอบปัญหาที่มองไม่เห็นซึ่งอาจจะเกิดขึ้น
-เพื่อช่วยหา Bug โดยอัตโนมัติ(เร็วขึ้นและไม่ต้องออกแรงเยอะ)
-เพื่อทดสอบทวน Code เก่าทุกครั้งที่มีการเพิ่ม Code ใหม่

เท่าที่ดูมาเหมือนจะอยู่ในบทเรียนทั้งนั้นทำเอารู้สึกผิดกับอาจารย์เลย T-T
อ้างอิง
http://en.wikipedia.org/wiki/Extreme_programming
http://en.wikipedia.org/wiki/Scrum_%28software_development%29
เพิ่มเติม
http://www.martinfowler.com/articles/continuousIntegration.html
http://guide.agilealliance.org/guide/ci.html
https://www.ibm.com/developerworks/rational/library/continuous-integration-agile-development/