Tuesday, May 1, 2012

โจทย์เกมส์ OX

ลองมาเขียนโปรแกรมเกมส์ OX แบบคอนโซลง่ายๆกันครับ

กติกา
  1. ผู้เล่นคือ O กับ X เล่นสลับกัน
  2. ตารางแสดงด้วยเลข 1-9
  3. ห้ามเลือกเลขที่ถูกเลือกไปแล้ว
  4. มีการตรวจสอบการชนะ คือแนวนอน แนวตั้ง และทะแยง
  5. มีการตรวจสอบถ้าเสมอกัน
ผลลัพธ์ที่ต้องการ
กรณีมีผู้ชนะ


 กรณีเสมอไม่แสดงรูปนะครับ ยาวเกิน

กรณีเลือกตำแหน่งซ้ำ โปรแกรมจะถามให้ป้อนใหม่เรื่อยๆจนกว่าจะถูก

ถ้าจะเช็คว่าป้อนเป็นตัวเลขอยู่ในช่วง 1-9 ได้ก็จะดีมากครับ



Saturday, March 3, 2012

ลองเล่น Linux Mint

หลังจากไม่ได้แตะ linux มานานมากกกก ด้วยไม่มีเวลาและไม่แน่ใจว่า linux จะสนับสนุนอุปกรณ์อย่างเพียงพอแล้วหรือยัง

ช่วงนี้ได้โอกาส เลยลองติดตั้ง Ubuntu 12.04 .....สวย แต่หน้าตาและการใช้งานไม่คุ้นเลย ต่างกับวินโดวส์พอสมควร

ไปค้นหาในเน็ต เว็บ distrowatch.com ให้ข้อมูลว่า page hit ในช่วงเดือนของ Linux Mint สูงกว่าใครเพื่อน อย่างนี้ต้องลอง

ไปดาวน์โหลด iso ที่ linuxmint.com มา มี mint4win สำหรับให้ติดตั้งบนวินโดวส์แบบ wubi ชอบมากๆ ไม่อยากไปปวดหัวกับการแบ่งพาร์ทิชันกับเอา grub ออกตอนเลิกใช้

ผลการทดลอง
1. mint เหมือนกับ ubuntu ยังกับแกะ เนื่องจากมีฐานมาจาก debian เหมือนกัน และยังออกตาม release ของ ubuntu ด้วย (แต่ตอนหลังรู้สึกว่าจะไม่)
2. มี mint4win เหมือน wubi เป๊ะ
3. ติดตั้งง่าย รวดเร็ว น่าจะเร็วกว่าวินโดวส์มากพอควร

ข้อด้อย
1. สนับสนุนฮาร์ดแวร์คล้ายๆกัน หาอะไรไม่เจอก็ไม่เจอเหมือนกัน เช่น ไม่เจอ wireless usb adapter ของ d-link dw-125 :( ต้องหาวิธีติดตั้งในเน็ต (http://kaustav.codebinders.com/2011/10/install-dwa-125-wireless-driver-on-ubuntu-11-10.html)
2. ยังมีปัญหากับ switchable graphics ทำให้ผมลงบนโน้ตบุ้คแบบนี้ไม่ได้ เครื่องจะร้อนตลอดเวลา

ข้อเด่น
1. สวย สวยกว่า ubuntu ด้วย
2. หน้าจอคล้ายวินโดวส์ ใช้งานง่ายกว่า ubuntu
3. เรียกใช้ terminal ง่ายกว่า คลิกขวาก็เรียกได้
4. อะไรที่ใช้ได้กับ ubuntu ก็ใช้ได้กับ mint แก้ปัญหาก็เหมือนๆกัน
5. ฟอนต์ไทยที่มีมาให้มีน้อยกว่า ubuntu

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

Wednesday, December 21, 2011

OpenCV 2.31 + QT support

ลอง compile ซอร์สโค้ด OpenCV 2.31 ให้ support QT+OpenGL ครับ เห็นอินเตอร์เฟสที่โชว์ในเว็บแล้วสวยดี

แต่ๆๆๆ ผลลัพธ์ที่ได้




มีข้อความว่า ตอนนี้ไม่สามารถใช้ OpenGL rendering กับการกำหนดสัดส่วนของหน้าต่างได้ ขนาดของรูปที่เล็กกว่า menu bar ด้านบน จึงทำได้รูปเบี้ยวไม่ได้สเกล :( ถ้ารูปกว้างกว่าแถบ menu ก็จะไม่เบี้ยว

ข้อดี
มีเมนูบาร์ สำหรับการ pan ซ้ายขวา บนล่าง ซูมเข้าออก เซฟผลลัพธ์ รวมถึงถ้าวางเมาส์บนรูป จะแสดงพิกัด x y และค่าพิกเซล

ข้อควรปรับปรุง
บักที่ทำให้รูปที่เล็กกว่าเมนูบาร์เบี้ยว

Visual C++ Express 2010 กับ OpenCV 2.31

ถึงเวลาที่ต้องมาใช้ VC++ จนได้ เพราะอยากเอาโค้ดไปเชื่อมกับ Matlab ผ่าน mex file และต้องเชื่อมกับ OpenCV ต่อไป

วิธีการติดตั้ง VC++ เพื่อให้ใช้ได้กับ OpenCV ดูตาม http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2010_CMake ได้ครับ ถ้ามีเวลาคงมาสรุปเป็นภาษาไทยอีกครั้ง

ผลการทำพบว่า คอมไพล์ซอร์สโค้ดก็ไม่ยากครับ แต่ไม่สามารถสร้างตัวไบนารีแบบ install ได้ ผมเข้าใจว่ามี bug เล็กน้อยใน makefile ตอนกำหนดไดเรกทอรี อย่างไรก็ตามถ้าก๊อปไฟล์เองก็ใช้งานได้

ปัญหาถัดมา เมื่อทดสอบกับซอร์สโค้ด OpenCV ทำการ build ผ่านไม่มีปัญหาครับ แต่ว่าตอน Debug ไม่ผ่าน ต้องไปรันไฟล์ต่างหากเอง ไม่รู้ว่าเพราะอะไร เซิร์ชหาก็ยังไม่เจอวิธีแก้ครับ คงต้องหลับหูหลับตาผ่านไปก่อน

ข้อดีของ Visual C++ กับ OpenCV
-ตัว auto complete ของ IDE VC++ นี่ดีจริงๆ แต่อืดเหมือนกัน
-Build ง่าย เลือก Debug หรือ Release เวอร์ชันก็ง่าย ขนาดไฟล์ผลลัพธ์เล็ก
-มีคนใช้เยอะ พอเจอปัญหาน่าจะหาทางแก้ง่าย

ปัญหาที่เจอ
-ทำตามคู่มือแล้วแต่คอมไพล์แบบ install ยังไม่สมบูรณ์
-Debug ไม่ผ่าน :( สงสัยผมจะลืมขั้นตอนอะไรไป


Thursday, December 15, 2011

งงกับการ link ของ g++

ทดลองคอมไพล์ซอร์สโค้ดของคนอื่น ด้วย g++ (mingw) บนวินโดวส์

Makefile ของเจ้าของเป็นบน unix

ส่วนของการคอมไพล์ไม่มีปัญหา พอมาลิงก์ แสดงผลว่า undefined reference xxx

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

สุดท้าย คำตอบอยู่ที่การเรียงลำดับคำสั่งของ g++

คอมไพล์
g++ -Ixxx -c input.cpp -o output.o 
เหมือนกันทั้ง unix และ windows (xxx คือตำแหน่งของ include files)

ลิงก์ (สมมติว่าสร้าง dynamic library)
-unix
g++ -Lyyy -lzzz -shared output.o -o libxyz.so
-windows
g++ -shared output.o -o libxyz.so -Lyyy -lzzz
(yyy คือตำแหน่งของ library file, zzz คือชื่อ library)

ต่างกันแค่เนี้ยยยย งมไปงมมาจนมึน
สุดท้ายใช้การได้ แต่เจ้าของโค้ดดันออกแบบให้ได้เฉพาะแบบของเขาซะอีก ต้องไปแก้โค้ดอีกเยอะเลย เฮ้อ
ไม่ใช้ซะดีไหมเนี่ย