การนำเข้าข้อมูลจากไฟล์ CSV เป็นลายเส้น Polygon ใน QGIS

การนำเข้าข้อมูลจากไฟล์ CSV เป็นลายเส้น Polygon

  • ก็ถือว่าเป็นทิปและทริคเล็กๆน้อยๆ ในกรณีสร้าง Vector ที่เป็นรูป Polygon จากข้อมูลดั้งเดิมที่เป็นไฟล์ Excel แล้วแปลงเป็น CSV นำมาสร้างเป็นรูป Vector ใน Quantum GIS ซึ่งโปรแกรมด้าน GIS ที่ฟรีและเปิดโค๊ด cross-platform ในแวดวง GIS คงรู้จักกันดี ข้อมูลในเบื้องต้นที่จะนำมาทดสอบเป็นตัวอย่างคือ
  1. ไฟล์รูปแปลงที่ดิน งานสำรวจในภาคสนามจะได้มาเป็นค่าพิำกัด UTM และมี ID สำหรับรูปแปลงที่ดินไว้ด้วย ส่วนใหญ่แล้วเมื่อได้ค่าพิกัดแปลงที่ดินจากสนามแล้ว Draftman จะทำการสร้างรูปใน Autocad เพื่อตรวจสอบรูปร่าง ซึ่งการนำไฟล์ CAD แปลงเป็นฟอร์แม็ต้าน GIS ทำได้หลายโปรแกรมเช่นเปิดไฟล์ CAD ด้วย Global Mapper ทำการสร้าง attribute เพื่อเก็บ ID รูปแปลงที่ดิน แต่ในกรณีผมขอย้อนไปจุดเริ่มว่าถ้ามีไฟล์แบบ CSV และเก็บรูปแปลงเป็นค่าพิกัดเรียงไปตามลำดับจะทำอย่างไร?
  2. ไฟล์Attribute เก็บ Parcel_ID แปลงที่ดินพร้อมคุณสมบัติต่างเช่น ชื่อแปลงที่ดิน, ชื่อกลุ่มแปลงที่ดิน

ไฟล์ที่เก็บรูปแปลงที่ดินแยกตาม Parcel_ID

ความต้องการขั้นต้นใน QGIS

    1. ต้องการ Plug-in ชื่อ “Add Delimited Text Layer” เป็นปลั๊กอินที่มากับ QGIS ตั้งแต่ติดตั้งเสร็จตอนแรกไม่แสดง ต้องทำการเลือกก่อนผ่านเมนู Plugins > Manage Plugins… ทำเครื่องหมายเลือกให้กับ “Add Delimited Text Layer” เท่านี้ก็ใช้ได้
    2. ต้องการ Plug-in ชื่อ “Points2One” ปลั๊กอินตัวนี้ไม่ได้มาแต่แรก ต้องติดตั้งเพิ่มผ่านทางเมนู Plugins > Fetch Python Plugins…  ต้องอินเทอร์เน็ตด้วยจึงจะดาวน์โหลดแล้วติดตั้งได้
    3. ต้องการ Plug-in ชื่อ “MMQGIS”เหมือนกับตัวบนคือต้องติดตั้งเพิ่ม
    4. Plug-in ชื่อ “fTools” มากับ QGIS ตั้งแต่แรกแล้ว

      Plugins ที่ต้องติดตั้งเพิ่มเติม

ขั้นตอนการทำงาน

  • รวมไฟล์แปลงที่ดินเป็นไฟล์เดียว ถ้าไฟล์แปลงที่ดินเก็บแยกไฟล์กันให้นำมารวมเป็นไฟล์ CSV ไฟล์เดียวจะสะดวกมาก แต่ละวงของ polygon จะต่างกันที่ Parcel_ID

นำเข้าไฟล์ CSV

  • ใช้ปลั๊กอิน “Add Delimited Text Layer” ทำการอ่านไฟล์ CSV ของเรา ผลลัพธ์จะอยู่ในรูปจุด (Point) แต่ละจุดจะมี Parcel_ID ที่ต่างกัน และในกลุ่มจุดที่ Parcel_ID เดียวกัน QGIS จะสร้าง feather_id ให้ตามลำดับการนำเข้า

ใช้ปลั๊กอิน Add Delimited Text Layer นำไฟล์ CSV เข้ามาในรูปจุด

นำเข้ามาแล้วจะได้จุด (point) ที่มี Parcel_ID ที่แตกต่างกัน

แปลงข้อมูลจุด (Point) เป็นลายเส้น (Polygon)

ใช้ปลั๊กอิน “Points2One” ทำการรวมจุดที่มี Parcel_ID เดียวกันเป็น Polygon สืบจากข้อ 2 ปลั๊กอินนี้จะมองหา Parcel_ID เดียวกันแล้วลำดับ feather_id เริ่มลากเส้นจาก feather_id เท่ากับ 1 จนไปสิ้นสุดตัวสุดท้ายแล้วทำการปิดรูปให้

ใช้ปลั๊กอิน Point2One แปลงจากจุดเป็น Polygon

polygon ที่ได้จากปลั๊กอิน Point2One

Join Attribute

  • เตรียมไฟล์ Attribute ของเดิมอาจจะเป็น Export ทำการ Export เป็น CSV ที่สำคัญคือต้องมีคอลัมน์ใดคอลัมน์หนึ่งที่มีเลข Parcel_IDเป็นหมายเลขแปลงที่ดิน ตัวอย่างชื่อคอลัมน์คือ Par_ID ทึ่จะเชื่อมโยงไปยังรูป polygon แปลงที่ดิน

    แสดงไฟล์ attribute ที่จะนำมา Join

  • ใช้ปลั๊กอิน “MMQGIS” ทำการ Joint Attribute ด้วยเมนู Plugins > mmgis > Attributes Join from CSV File… จากไดอะล็อกเลือกไฟล์ (Input CSV File) แล้วกำหนด ID ของไฟล์ที่ CSV File Field ในที่นี้เป็น Par_IDเลือก layer ที่จะนำมา join (Join Layer) ในที่นี้เป็น Polygon_Parcels เลือก Join Layer Attribute ในที่นี้เป็น Parcel_ID เลือก Output Shape File เพื่อเก็บไฟล์ที่ Join Attribute กันแล้ว ส่วน Parcel_ID ไหนหาตัว join ไม่ได้เก็บไว้ในไฟล์ notfound.csv ซึ่งทำให้สามารถตรวจสอบได้ว่า Parcel_ID ที่ไม่สามารถหาคู่กันเจอ

    ใช้ปลั๊กอิน MMQGIS เพื่อ Join Attribute

  • หลังจาก Join แล้วลองปรับการแสดงผลดูได้ดังรูป

    QGIS แสดงผล layer ที่ได้จากการ join แล้ว

  • ลองเปิด table ของ layer ที่ join แล้วดู

    แสดง Table ที่ได้จากการ join แล้ว

การประมวลผลในเบื้องต้น

  • มาลองใช้ปลั๊กอินในการประมวลผลดู ปลั๋กอินตัวนี้ชื่อ fTools มาพร้อมกับ QGIS แต่ต้อง enable ก่อนถึงจะใช้งานได้ สำหรับ GIS แล้วการทำ processing เพื่อประมวลผลหาผลลัพธ์ที่ต้องการคือหัวใจของงาน GIS เมื่อได้ผลลัพธ์แล้วต่อไปก็คือการทำ Report และแสดง map สำหรับผลลัพธ์นั้นๆ
  • โจทย์ก็มีว่าถ้ามีแนวถนนกว้างเท่ากับ 100 เมตร (จริงแล้วคือเขตถนนหรือ right of way) ผ่านเข้าไปในแปลงที่ดิน ให้ประมวลผลว่าเข้าไปในแปลงไหนพร้อมแสดงเป็น map
  • ข้อมูล (layer) ที่จะนำมาประมวลผลสมมติว่ามี polyline (เส้นเดี่ยวไม่มีความกว้าง) ที่แทนแนวถนนตัดผ่านแปลงที่ดิ ผมนำเข้าถนนเข้าดังรูป

layer ถนน ที่เพิิ่มเข้าไป

  • ต่อไปจะขยายถนนให้ได้ขนาดกว้าง 100 เมตรด้วยการทำ Buffer ด้วยปลั๊กอืน fTools ใช้เมนู Vector > Geoprocessing Tools > Buffer ป้อนค่าใส่ไดอะล็อกดังรูป

ทำ Buffer ให้ได้ขนาดความกว้าง 100 เมตร

ความกว้างถนน 100 เมตร

  • ต่อไปจะหา polygon แปลงที่ดินที่ถูกตัดด้วยขอบเขตถนน 100 เมตรที่ตัดผ่าน ที่เมนู Vector > Geoprocessing > Intersect ใส่ค่าไปตาม dialog ดังรูปด้านล่าง

การทำ intersect ระหว่างขอบเขตถนนที่ได้จาก buffer กับ polygon ของแปลงที่ดิน

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

ผลจากการ intersect

  • ลองเปิดดู Attribute table ของ layer ที่ได้จากการ intersect

Attribute table ของเลเยอร์ถนนที่ตัดกับแปลงที่ดิน

สรุป

  • สำหรับผมแล้วใช้ QGIS เป็นหลักเพราะไม่ได้ใช้ฟังก์ชั่นการวิเคราะห์ที่ลึกซึ้งนัก ความเร็วของ QGIS ก็ไม่เลวเปิดรูปประมาณ 3 กิกะไบต์ก็ยังไปได้ แต่ขาดเรื่องการจัดปรินต์ Layout ที่ยังไม่ดีพอ อีกอย่างคือการ label ยังไม่เก่ง แต่ฟีเจอร์ต่างๆทางทีมผู้พัฒนาก็ปรับปรุงไปเรื่อยๆครับ
Categories: GIS, Linux, Windows ป้ายกำกับ:, , , , , , , , , ,

การกลับมาของ OpenGL เพื่อมาต่อกรกับ DirectX

ท้าวความถึง OpenGL

  • OpenGL มองในด้านโปรแกรมมิ่งจะเป็นคำสั่งชุดหรือ APIs (Application Program Interface) สำหรับให้ผู้พัฒนาโปรแกรมด้าน 3D สามารถเรียกใช้ความสามารถจากฮาร์ดแวร์บนเครื่องคอมพิวเตอร์ OpenGL เป็น Cross-Platform สามารถจะใช้ได้บนวินโดส์ ลีนุกซ์ บนแมค
  • สำหรับโปรแกรมด้าน 3D พอจะแบ่งได้คร่าวๆ 3 ประเภทคืออย่างแรกด้าน CAD & GIS อย่างที่สองคือโปรแกรมด้าน 3D Graphic Animation(3D Max, Maya) อย่างหลังคือ Game ซึ่งเป็นตลาดที่ใหญ่มาก โปรแกรมจำพวกนี้ถ้าไม่ใช้ OpenGL ก็ใช้ DirectX ของ Microsoft ซึ่งจะได้กล่าวอีกครั้ง

ผู้ก่อกำเนิด OpenGL

  • ย้อนหลังไปในปี 1981 บริษัทฯ Silicon Graphics International Corp ได้ถูกก่อ โดย Jim Clark  ต่อไปจะเรียกชื่อบริษัทฯนี้สั้นๆว่า SGI ซึ่งตั้งขึ้นมาเพื่อตลาดด้าน 2D & 3D Graphic ประกอบไปด้วยฮาร์ดแวร์และซอฟแวร์ คือขายรวมกัน ฮาร์ดแวร์ส่วนใหญ่เป็น workstation ทำงานอยู่บน Unix
  • บทบาทที่สำคัญของ SGI คือออกแบบไลบรารี IRIS GL และสร้าง APIs สำหรับให้นักพัฒนาโปรแกรมบน workstation ของ SGI ได้พัฒนาโปรแกรมด้าน 2D & 3D บน platform ของ SGI นับว่าเป็นการปฏิวัติวงการกราฟฟิคซึ่งจะมีบทบาทอย่างสูงในช่วงปี 1990
  • ต้นปี 1990 SGI คือผู้นำในวงการ 3D Graphic เพราะความเสามารถด้านฮาร์ดแวร์และไลบรารี IRIS GL ที่มีความยืดหยุ่นใช้งานได้ง่าย ความสามารถสูงและเป็นมาตรฐานสำหรับงาน 3D Graphic แต่ก็มีปัญหาตามมาคือ platform ของ SGI ยังเป็นระบบปิด ทำให้คู่แข่งไม่มีโอกาสและความได้เปรียบ ปี 1992 ทาง SGI จึงทำการแก้ไข IRIS GL ใหม่โดยยกเลิกสิ่งที่ไม่เกี่ยวข้องบางอย่างออก และเรียกว่า OpenGL (Open Graphic Library) เพื่อให้ผู้ผลิดฮาร์ดแวร์สามารถนำพัฒนา Device Driver ให้มีความสามารถด้าน 3D Graphic ตามไลบรารีที่ SGI ได้ออกแบบไว้ ในที่สุด OpenGL ก็กลายเป็นมาตรฐาน
  • การเปิดแบบนี้ทำให้ผู้ผลิตฮาร์ดแวร์เช่นการ์ดจออื่นๆสามารถนำความสามารถของ  OpenGL ไปผลิตการ์ดจอให้ได้ตามที่ต้องการไม่ต้องยึดติดกับ platform ของ SGI และในทางเดียวกันผู้พัฒนาโปรแกรมก็สามารถนำ APIs ของ OpenGL ไปพัฒนาซอฟแวร์ประเภท 3D ที่กล่าวไปแล้วเช่นเดียวกัน ตราบเท่าที่ฮาร์ดแวร์สนันสนุนโปรแกรม 3D นั้นๆก็สามารถรันได้

ความยืดหยุ่น (Flexibility)

  • ประโยชน์สูงสุดของ OpenGL ในตอนนี้คือผู้ผลิตฮาร์ดแวร์ต่างๆสามารถเสริมความสามารถด้วย Extension หรือส่วนเสริม ถ้า OpenGL ไม่มีฟีเจอร์ในส่วนนั้น ผู้ผลิตหลายรายเช่น Nvidia, Apple ได้พัฒนา extension เพื่อสนับสนุนฮาร์ดแวร์ของตนโดยเฉพาะ มองในข้อดีคือความยืดหยุ่น แต่ข้อเสียก็ตามมาคือไม่เป็นมาตรฐาน

มาตรฐานเปิด (Open Standard)

  • ในปี 1992 มีการก่อตั้ง ARB (OpenGL Architechure Review Board) เพื่อรวบรวมความต้องการของผู้ผลิตฮาร์ดแวร์และซอฟแวร์ต้องการฟีเจอร์อะไรเพิ่มในอนาคต ทั้งนี้เพื่อความเป็นมาตรฐานและเป็นระบบที่เปิดนั่นเอง
  • และแล้ว OpenGL ก็กลายเป็นผู้นำในเรื่อง 3D Graphic API และเป็นหนึ่งเดียวที่สามารถใช้งานได้หลาย platform

OpenGL บนวินโดส์

  • ไมโครซอฟต์ปล่อย Windows NT ในปี 1993 ซึ่งจะเป็นคู่แข่งของระบบ Unix ด้วยการสนับสนุนฮาร์ดแวร์ 32 บิต และก็ปล่อย Win32 API สำหรับสร้างโปรแกรมใช้บนวินโดส์ ซึ่งโปรแกรมเมอร์ C คงจะจำกันได้ดีในยุคนั้น
  • เนื่องจาก  Windows NT ยังไม่มีไลบรารี 3D จึงสนันสนุน OpenGL ปี 1994 ขณะนั้น Windows NT เป็นรุ่น 3.5 แต่ก็ทำงานช้ามาก เพราะยังไม่มีการปรับ OpenGL ให้เข้ากับฮาร์ดแวร์บนวินโดส์

DirectX

  • ไมโครซอฟท์เริ่มมองเห็นความสำคัญของ 3D Graphic ในตลาดเกมส์ และมองหาไลบรารี 3D เพื่อจูงใจผู้พัฒนาเกมส์ ความพยายามครั้งแรกเริ่มที่ WinG API แต่ไลบรารีก็แค่ 2D ก็ยังไม่มีเรื่อง 3D สุดท้ายซื้อบริษัท RenderMorphics ในปี 1995 ผู้ซึ่งผลิต 3D API ในนาม Reality Lab
  • API ตัวนี้ถูกเปลี่ยนชื่อเป็น Direct3D และรวมๆเรียกว่า DirectX ที่มีเครื่องมืออื่นๆเช่นเรื่องเสียง เน็ตเวิร์ค การวาดแบบ 2D อุปกรณ์เช่น Joystick
  • เริ่มต้นแล้ว DirectX การแสดงผลและประสิทธิภาพยังช้าอยู่มาก ทำให้ไมโครซอฟท์ยังคงสนับสนุน OpenGL 1.1 ต่อไปบนวินโดส์ 95 และ NT 4.0

เริ่มต้นสงคราม

  • ขณะที่ไมโครซอฟท์พยายามยืนกรานว่า OpenGL ดีสำหรับงาน CAD (Computer Aided Design) เท่านั้น เพื่อที่จะครอบครองตลาดเกมส์แต่เพียงผู้เดียว John Carmack แห่ง id software บริษัทผู้พัฒนาเกมส์ Quake ที่ใช้ OpenGL ออกมาวิจารณ์ถึงความง่ายในการใช้งาน OpenGL
  • ธันวาคม ปี 1996 John Carmack แสดงเอกสารพร้อมทั้งข้อคับข้องใจต่อ Direct3D ไม่เพียงเท่านั้นยังแสดงการเปรียบเทียบโค๊ดของโปรแกรมที่วาดรูปสามเหลี่ยมบนจอภาพ OpenGL ใช้เพียง 4 บรรทัดเท่านั้นแต่ Direct3D กลับใช้โค๊ดมากกว่าหลายบรรทัด
  • กุมภาพันธ์ ปี 1997 Alex St. John ผู้พัฒนา Direct3D ของไมโครซอฟท์ก็ออกมาตอบใต้ว่าคำวิจารณ์ของ John Carmack ได้สร้างความเสียหายให้กับ Direct3D เขาอธิบายว่า Direct3D นั้นเน้นเข้าถึงฮาร์ดแวร์มากกว่าซอฟแวร์ ถึงโค๊ดของโปรแกรมไม่สวยแต่ก็ทำงานได้ดี และก็ตอกย้ำอีกครั้งว่า OpenGL เหมาะที่จะเป็น API สำหรับโปรแกรมด้าน Cad เท่านั้น
  • เดือนมิถุนายน 1977 SGI ออกมาสำทับต้อบโต้กับบทวิจารณ์ของ Alex St. john เรื่องความบกพร่องต่อการออกแบบ Direct3D เปรียบเทียบ  API  ทั้งสองและแสดงถึงความง่ายในการใช้งาน OpenGL
  • ไมโครซอฟท์ปรับปรุง Direct3D ในรุ่น 5.0 ถอดเอาฟึเจอร์ที่ไม่สะดวกในการใช้งานออก ในตอนนี้ทั้งสอง API ใช้งานได้ง่ายแล้ว

เรื่องของ Driver

  • สำหรับไดรเวอร์ของ OpenGL จะถูกใช้งานใน Windows NT ผ่านทางไดรเวอร์ที่เรียกว่า Mini-Client Driver (MCD) ซึ่งทำให้ประสิทธิภาพต่ำมาก แต่ก็เป็นวิธีการที่ง่ายที่สุดในการสร้างไดรเวอร์สำหรับฮาร์ดแวร์ที่ต้องการใช้กับ OpenGL แต่ไมโครซอฟท์ก็ตอบโต้ด้วยการไม่อนุญาตให้ใช้ MCD ทาง SGI จึงเสนอวิธีสร้างไดรเวอร์สำหรับ Windows NT ผ่านทางที่เรียกว่า Installation Client Driver (ICD) ทางผู้ผลิตฮาร์ดแวร์ได้ใช้ ICD เพื่อสร้างไดรเวอร์ ไม่นานจากนี้อุตสาหกรรมเกมส์เริ่มนำ OpenGL มาใช้เป็นทางเลือกแทนที่ Direct3D

การปฏิวัติของวงการฮาร์ดแวร์

  • ในช่วงปลายของศตวรรษ 1990 OpenGL ได้ปักหลักในอุตสาหกรรมไม่เฉพาะด้าน CAD เท่านั้น เกมส์ดังๆเช่น Quake 2, Unreal และ Half-Life ก็ได้ใช้ OpenGL และเป็นที่นิยมในเกมส์อื่นๆเช่นเดียวกัน ในตอนนี้ก็มีผู้ผลิตการ์ดจอในราคาไม่แพงและจะเป็นผู้มาปฏิวัติวงการก็คือ 3Dfx
  • 3Dfx ได้ปล่อยการ์ดจอเรียกว่า Voodoo ซึ่งมีประสิทธิภาพสูงมากในสมัยนั้น ในขณะนั้นทาง ATI เริ่มขาย 3D Rage และ S3 Virge แต่ก็ไม่มีใครสู้ Voodoo ของ 3Dfx ได้ ต้องนี้ 3Dfx คิดการใหญ่ได้สร้าง API ของตัวเองขึ้นมาใหม่เรียกว่า Glide ซึ่งเป็น API ที่เร็วและแรงที่สุด แต่อย่างว่าผู้ผลิตฮาร์ดแวร์อื่นๆก็ใช้ไม่ได้ แต่ Glide ก็สร้างปรากฎการณ์ ไม่นาน Glide ก็พบจุดจบ
  • NVIDIA ถูกก่อตั้งในปี 1999 และขายการ์ดจอชื่อ Geforce 256 และได้เรียกการ์ดจอว่า GPU (Graphic Processing Unit) ได้เพิ่มคุณสมบัติที่เรียกว่า T&L (Transform & Lighting) ตัว T&L จะย้ายการคำนวณ Vertex transformation จาก CPU ไปสู่ GPU ซึ่งข้อดีของ GPU จะคำนวณทางคณิตศาสตร์ได้รวดเร็วมากกว่า  CPU เนื่องจากถูกออกแบบให้ทำงานนี้โดยตรง น่าเศร้าที่ 3Dfx ไม่มีคุณสมบัติ T&L ไม่นาน 3Dfx ก็พบจุดจบ
  • สุดท้าย 3Dfx ก็ล้มละลาย จึงถูก NVIDIA เข้าไปซื้อกิจการและ NVIDIA ก็ไม่ได้ออกการ์ดจอรุ่น Voodoo อีกเลย ในขณะนั้นคู่ปรับตลอดกาลของ NVIDIA คือ ATI ซึ่งมีการ์ดจอชื่อ Radeon 7000 ซึ่งเป็น GPU เช่นเดียวกัน และทั้งสองเจ้านี้ก็สนับสนุนเฉพาะ Direct3D และ OpenGL เท่านั้น

การเปลี่ยนแปลงคุณสมบัติที่สำคัญ

  • ในตอนนี้การเรนเดอร์เพื่อให้ได้ภาพ 3D ถูกย้ายจากการคำนวณจาก CPU ไป GPU เพื่อลดคอขวด สองฟีเจอร์ที่จะกล่าวต่อไปนี้คือวิธีการที่กล่าวไปแล้ว

Buffers

  • ในทางโปรแกรมมิ่งแล้วคำว่า Buffers คือสถานที่ในหน่วยความจำที่ถูกเก็บข้อมูลบางอย่างแบบชั่วคราว เมื่อเลิกใช้แล้ว Buffers ก็จะถูกทำลายเพื่อคืนหน่วยความจำให้กับระบบ
  • วัตถุที่จะถูกเรนเดอร์เป็น 3D บนจอภาพจะถูกเก็บในรูป buffers เช่น Vertex array วิธีการเดิมๆ Vertex array จะถูกเก็บในหน่วยความจำกลาง (บนแรมนั่นเอง) จากนั้นจะย้าย buffer นี้ไป GPU ซึ่งทำให้ช้าเนื่องจาก buffer มีขนาดใหญ่ วิธีการใหม่คือ buffer จะถูกเก็บในหน่วยความจำของ GPU  ทำให้ไม่มีคอขวดอีกต่อไป การเรนเดอร์ทำได้เร็ว
  • ใน OpenGL ตัว buffer นี้เรียกว่า Vertex Buffer Objects (VBOs) ใน Direct3D เรียกว่า Vertex Buffers

Shaders

  • ในปี 2000 ไมโครซอฟท์ได้ปล่อย Direct3D รุ่น 8.0 เพิ่มคุณสมบัติที่เรียกว่า Shaders ซึ่งเป็นโปรแกรมเล็กๆที่รันบน GPU ทำให้เพิ่มความเร็วของการเรนเดอร์ภาพ 3D จะเป็นการลดภาระของ CPU อีกแรงหนึ่ง ไมโครซอฟท์เรียก shaders ที่มีสองแบบว่า Vertex Shader และ Pixel Shaders
  • Vertex Shaders เป็นโปรแกรมที่จะถูกรันต่อหนึ่ง vertex ที่ถูกกำหนดให้ ส่วน Pixel Shaders จะถูกรันต่อหนึ่ง pixel การใช้ shader ดังกล่าวจะลดคอขวดที่จะเรียกใช้งาน CPU ได้มาก แต่ข้อเสียคือยากในการเขียนโปรแกรมเนื่องจากโครงสร้างคล้ายกับภาษา Assembly
  • ในปี 2003 ไมโครซอฟท์ เปลี่ยนโครงสร้างของโปรแกรมให้เขียนได้ง่ายขึ้นเรียกว่า High Level Shader Language (HLSL) พร้อมกับการปล่อย Direct3D รุ่น 9.0 ทั้งนี้โครงสร้างภาษาอยู่บนพื้นฐานภาษา C

ยุคซบเซาของ OpenGL

  • ในตอนนั้น OpenGL ยังไม่สนับสนุนเรื่อง shaders จนกระทั่งในปี 2004 ที่ออก OpenGL รุ่น 2.0 เรียกโครงสร้างของการเขียนโปรแกรม shader นี้ว่า OpenGL Shader Language (GLSL) แต่การตามหลังไมโครซอฟท์ถึง 4 ปีทำให้ OpenGL ต้องวิ่งไล่ Direct3D เหมือนกับที่ Direct3D เคยวิ่งไล่ OpenGL ในทศวรรษก่อนหน้านี้
  • ในปี 2004-2006 มีเกมส์น้อยที่สนับสนุน OpenGL จนกระทั่งปี 2005 ไมโครซอฟท์ออก XBox เพื่อยึดคลองตลาดเกมส์คอนโซล ตอนนี้ทั้ง ARB หรือ SGI ทำตัวเงียบทำให้ดูเหมือนว่า OpenGL ตายแล้ว
  • ในปี 2006 OpenGL รุ่น 2.1 ก็ถูกปล่อยมา มีการเพิ่มฟีเจอร์ไม่กี่อย่าง สถานการณ์ยิ่งเลวร้ายขึ้นเมื่อไมโครซอฟท์ปล่อย Direct3D รุ่น 10.0 ซึ่งจะใช้ได้บน Windows Vista เท่านั้น ผู้ผลิตฮาร์ดแวร์เริ่มปรับทิศทางตามไมโครซอฟท์
  • ในระหว่างนี้โปรแกรมเมอร์ที่ใช้ OpenGL เริ่มถามและต้องการคำตอบจาก ARB และ SGI แต่คำตอบกลับเป็นสิ่งที่แตกต่างตาลปัตร

OpenGL รุ่นใหม่

  • ปี 2006 ก่อตั้ง Khronos Group ขึ้นมาเพื่อดูแล OpenGL แทน SGI ทั้งที่ SGI ยังถือลิขสิทธิ์อยู่ Khronos Group เป็นกลุ่มของผู้ผลิตฮาร์ดแวร์และซอฟแวร์ที่ยังสนใจที่จะใช้ OpenGL ต่อ มีการเปิดเผยว่าใช้รูปแบบการเก็บข้อมูล 3D เรียกว่า Collada ในระหว่างนี้มีข่าวว่า OpenGL จะถูกปรับปรุงเพื่อเปลี่ยนแปลงคุณสมบัติคร้งใหญ่ หลังที่เงียบมาแล้วสองปี

Long Peak และ Mt. Evans

  • รุ่นของ OpenGL ที่จะพัฒนามี code name ว่า Long Peak และ Mt. Evans ตัว Long Peak จะถูกปล่อยในฤดูร้อนปี 2007 และ Mt. Evans จะปล่อยตามติดในเดือนตุลาคมปีเดียวกัน
  • รุ่นดังกล่าวให้ความหวังจะมาต่อกรกับ Direct3D รุ่น 10.0 และการเรนเดอร์จะต้องใช้ buffers และ shader ทั้งหมด ผลก็คือตัว API ต้องเขียนใหม่ทั้งหมดด้วยกลุ่มทีเรียกว่า Technical Sub Group (TSG)
  • หนึ่งในสิ่งที่จะพัฒนาขึ้นมาใหม่คือ Object Model ซึ่งจะต้องมาเกี่ยวข้องกับ buffers การเสนอ Object Model ใหม่นี้ทำให้เกิดวิธีการสร้าง Object Model แบบใหม่ เพียงการใช้ฟังก์ชั่นไม่กี่บรรทัด ตัว Long Peak จะออกแบบใหม่ให้มีการเข้ากันกับฮาร์ดแวร์ก่อนหน้านี้ ส่วน Mt.Evans จะถูกออกแบบโดยไม่มีการเข้ากันกับอุปกรณ์ก่อนหน้านี้ มุ่งไปข้างหน้า ด้วยฟีเจอร์ที่เสนอนี้ ทำให้ได้รับการรอคอยอย่างคาดหวังจากชุมชนคน OpenGL
  • แต่ในฤดูร้อนปี 2007 ก็ผ่านไปจนถึงเดือนตุลาคม มีข่าวจาก Khronos Group ว่าเลื่อนการออก OpenGL ชุมชนคน OpenGL ก็มีอาการไม่พอใจเล็กน้อย แต่เทียบกับคุณสมบัติใหม่ที่รอคอยแล้วก็คุ้มที่จะรอ และแล้วก็ผ่านไปอีกปี

OpenGL รุ่น 3.0

  • เดือนกรกฎาคม ปี 2008 ก็ออกรุ่น 3.0 มา นับเป็นระยะเวลา 4 ปี ตั้งแต่รุ่น 2.1 ออกมา แต่ที่น่าผิดหวังคือคุณสมบัติที่รอคอยกลับไม่มี ดูเหมือนจะเปลี่ยนแปลงไปเล็กน้อย ที่สัญญาเรื่อง Object Model ก็ไม่มีและไม่มีทีท่าว่าจะเกิดขึ้นในรุ่นต่อๆไป มีเพียงฟีเจอร์ใหม่ที่เสนอมาคือ deprecation mode และความเข้ากันได้กับฮาร์ดแวร์ก่อนหน้านี้
  • ยังผลทำให้ชุมชนคน OpenGL ต่อต้านตามเว็บบอร์ด ซึ่งหนึ่งในข้อกล่าวหาต่อ Khronos Group ที่ทำให้ OpenGL มีความเข้ากันได้ฮาร์ดแวร์เก่าๆเพราะต้องการรักษาลูกค้าขายซอฟท์แวร์ด้าน CAD ยังผลให้ผู้พัฒนาซอฟท์แวร์บนวินโดส์ เริ่มทิ้ง OpenGL หันไปใช้ Direct3D ความสิ้นหวังต่อ OpenGL ดูเหมือนว่าสงครามระหว่าง API ได้จบลงไปแล้ว

After the Shock

  • ถึงแม้จะไม่พอใจใน OpenGL รุ่นนี้ก็ตาม แต่ OpenGL 3.0 ก็มีฟีเจอร์เทียบเท่ากับ Direct3D 10.0 แต่สิ่งที่เหนือกว่าคือ OpenGL 3.0 ยังใช้งานได้บน Windows XP แต่ Direct3D 10.0 ต้องรันบน Vista เท่านั้นเนื่องจากโครงสร้าง Drivers ใหม่ของไมโครซอฟท์ที่ต้องการ Vista ขึ้นไปเท่านั้น
  • เดือนมีนาคม 2009 ก็ออก OpenGL 3.1 มาคุณสมบัติใกล้เคียงกันกับ Long Peak และ Mt.Evans ดั่งที่เคยเสนอไปแล้ว ตอนนี้ OpenGL กลับมาอยู่ในเส้นทางที่พร้อมจะต่อกรอีกครั้ง ไม่กี่เดือนต่อมาก็ออกรุ่น 3.2 พร้อมคุณสมบัติใหม่คือ Geometry Shaders

OpenGL รุ่น 4.0

  • หนึ่งปีผ่านไปหลังจากปล่อยรุ่น 3.2 ไปแล้วก็ได้เวลาคลอดรุ่น 4.0 ซึ่งคุณสมบัติพอฟัดพอเหวี่ยงกับ Direct3D 11.0 ในขณะเดียวกันก็ได้ออกรุ่น 3.3 ออกมาด้วยซึ่งมีคุณสมบัติใกล้เคียงกับ 4.0 แต่มีความเข้าได้กับฮาร์ดแวร์รุ่นเก่า
  • ในทุกวันนี้ถ้าต้องการเขียนโปรแกรม 3D ที่สามารถรันได้นอกเหนือจาก platform ของไมโครซอฟท์แล้วทางเลือกเดียวคือ OpenGL ถ้าสนใจจะพัฒนาโปรแกรมด้าน 3D บนอุปกรณ์มือถือเช่น Android หรือ iPad, iPhone ก็มีไลบรารี OpenGL ES ซึ่งใกล้เคียง กับ OpenGL รุ่นใหญ่ ทำให้การ port code ให้สามารถรันได้บน PC, Macs ลีนุกซ์หรือแม้แต่อุปกรณ์มือถือที่กล่าวไปแล้ว
  • นอกจาก OpenGL ES แล้วยังมีรุ่น WebGL สำหรับพัฒนาโปรแกรม 3D บนเว็บ

OpenGL รุ่น 4.1 และ OpenGL 4.2

  • เดือนกรกฎาคม ปี 2010 ออกรุ่น 4.1 มีการปรับปรุงคุณสมบัติบางอย่างที่เทียบเท่ากับ Direct3D 11.0 ในรุ่นนี้โค๊ดของ OpenGL มีการเข้ากันกับ (Full campatibility) OpenGL ES ได้อย่างสมบูรณ์
  • เดือนสิงหาคม ปี 2011 ออกรุ่น 4.2 เช่นเดียวกันปรับปรุงคุณสมบัติหลายอย่างทำให้การเรนเดอร์ทำได้เร็วกว่าเดิม
  • ความต้องการของฮาร์ดแวร์ ได้แก่ Nvidia GeForce 400 series, Nvidia GeForce 500 series, ATI Radeon HD 5000 series, AMD Radeon HD 6000 Series

OpenGL ในมุมของ Lazarus

  • ไม่นานมานี้เองผมพยายามหาไลบรารีที่จะมาช่วยทำโปรแกรม 2D จากที่เคยเขียนมาเองแต่ก็หน่อมแน๊มเกินไป ก็ไปเจอ GLSCene ดั้งเดิมพัฒนาโดย Mike Lischke เปิดเป็น opensource และภายหลังดูแลโดย Eric Grange ตอนแรกพัฒนาเป็น VCL สำหรับโปรแกรมเมอร์ Delphi โดยเฉพาะในรุ่นหลังใช้ได้กับ Lazarus ซึ่งผมลองแล้วทั้งบนวินโดส์กับลีนุกซ์ แต่บนวินโดส์เมื่อดาวน์โหลด sourcecode ตอนติดตั้ง package จะมีปํญหา ผมจึงทำการแก้ไขโค๊ดไปเล็กน้อยก็ใช้งานได้ แต่ตัวอย่างที่ให้มาประมาณ 60% ที่ใช้งานได้ เนื่องจากโน๊ตบุ๊คที่ใช้งานอยู่ ยังเป็นการ์ดจอบนบอร์ด จึงทดสอบคุณสมบัติบางอย่างไม่ได้
  • ผมลองดูตัวอย่างที่ให้มาก็คือพยายามเรียนรู้จากตัวอย่าง ก็ไม่ได้ยากเกินไป จุดเริ่มต้นของผมแค่อยากพัฒนา 2D ในตอนแรกก็เลยมีความตั้งใจจะเรียน 3D ไปด้วย ปีหน้าจะซื้อโน๊ตบุ๊คเครื่องใหม่คงได้ลองฟีเจอร์เด็ดๆดูกัน

GLScene ที่ติดตั้งบน Lazarus

  • ผมนำโค๊ดจากตัวอย่างมาปรับเพิ่ม effect บางอย่างมาเขียนเป็นเมนู Aboutของโปรแกรมแสดงข้อมูลที่เกี่ยวข้องกับโปรแกรมเช่นชื่อโปรแกรม รุ่นของโปรแกรม ผู้พัฒนาก็ได้ผลดังรูปด้านล่าง แสดงรูปของทีมงานผู้พัฒนาโปรแกรมหมุนรอบ effect  ไฟ คล้ายนั่งม้าหมุนที่นั่งกันสมัยเด็ก

    About ของโปรแกรม

ก่อนจากกัน

  • ถ้าสนใจจะลองไลบรารี GLScene บน Lazarus ถ้าดาวน์โหลดมาแล้วใช้ไม่ได้ก็ลองขอมาดู ผมจะนำไฟล์ไปฝากไว้แถวๆ file share ครับ โลกนี้ถ้ามีแต่ไมโครซอฟท์วินโดส์ อย่างเดียวโลกนี้คงเหงาพิลึก ความคาดหวังของผมแล้ว OpenGL ไม่ต้องเหนือกว่า Direct3D แต่ขอให้เทียบเท่าก็พอ เพราะสินค้าที่ผลิตมาเพื่อการพาณิชย์จากยักษ์ใหญ่ย่อมมีกำลังที่เหนือกว่า

เครดิต

  • เรื่อง OpenGL ที่เขียนมาเกือบทั้งหมดผมเรียบเรียงมาจาก http://openglbook.com/the-book/ เนื่องจากไม่มีวิทยาการที่ลึกซึ้งกับ OpenGL ผิดพลาดประการใดก็ขออภัยครับ
Categories: 3D, Lazarus, Linux, Programming, Windows ป้ายกำกับ:, , , , , , ,

วิธีสร้าง Debian Package สำหรับติดตั้งโปรแกรมบน Ubuntu

จากผู้ใช้สู่ผู้สร้าง

  • ถ้าใช้ Linux เครือข่าย Debian  เช่น Ubuntu, Kubuntu การติดตั้งโปรแกรม ไลบรารีต่างๆ คงคุ้นเคยกับ package ที่มี extension เป็น deb กันพอสมควร ผมมีโปรแกรมที่พัฒนาด้วย lazarus อยู่หลายโปรแกรม บางโปรแกรมพอร์ทมาจากเดลไฟ บางโปรแกรมพัฒนาเริ่มต้นด้วย lazarus โดยตรง

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

ข้อกำหนด (Debian Package Policy)

  • ข้อกำหนดหรือนโยบายเป็นขอบเขตว่าถ้าจะสร้าง debian package จะต้องทำอะไรบ้างที่อยู่ในกรอบนี้หาอ่านได้ที่นี่ บอกกันตามตรงว่าผมดูผ่านๆ ถ้าจะอ่านกันจริงๆตอนนี้คงไม่ได้มาเขียนโพสต์นี้หรอก คงเกิดอาการกล้าๆกลัวๆ จะทำได้หรือปล่าว
  • ที่จำเป็นต้องมีกรอบและกติกา ก็เพราะเวลาทำการติดตั้ง debian จะได้หาสิ่งที่ต้องการได้ถูกเช่นใน package ของเราจะมีโปรแกรมที่เป็นไฟล์ไบนารี มีไฟล์ icon ที่จะแสดงบนเมนูหรือ desktop มีชื่อโปรแกรมที่กำกับใต้ล่าง icon ผู้พัฒนาคือใคร เป็นโปรแกรมรุ่นที่เท่าไหร่ ต้องการไลบรารีอะไร (Dependency)

ขั้นตอนการสร้าง Debian Package อย่างง่าย

1.สร้างไดเรคทอรีหลัก
  • ผมสร้างไดเรคทอรีหลักใน Home ชื่อ MyDebianPackages เมื่อเสร็จแล้วเราจะสร้างไดเรคทอรีย่อยๆเพื่อแยกเก็บแต่ละโปรแกรม ถ้าไม่ใช้ command line ก็ Nautilus นี่แหละง่ายๆ
  • สร้างไดเรคทอรีย่อยแยกตามโปรแกรม ตัวอย่างผมสร้างไว้ 3 ไดเรคทอรี

ไดเรคทอรีสำหรับเก็บ Debian Package

  • ผมยกตัวอย่างให้เห็นความแตกต่างโปรแกรม Traverse Pro ต้องการไลบรารีพื้นฐานคือ GTK2 ส่วนอีกสองโปรแกรมคือ AutocardMaker และ Autocheckpoint นอกเหนือจากไลบรารี GTK2 แล้วต้องการไลบรารีของฐานข้อมูล Firebird
2.สร้างไดเรคทอรีรองตามรุ่นของโปรแกรม
  • เราจะสร้างไดเรคทอรีย่อยลงไปอีกแต่ละโปรแกรมเพื่อเก็บ package แยกเป็นเวอร์ชั่น ตัวอย่าง Traverse Pro ของผมตอนนี้รุ่น 2.0.1 โปรแกรม Autocheckpoint  รุ่น 1.2.20

ไดเรคทอรีเก็บโปรแกรม Traverse Pro รุ่น 2.0.1

ไดเรคทอรีโปรแกรม Autochekcpoint รุ่น 1.2.20

3.สร้างไดเรคทอรีย่อยตามข้อกำหนด
  • ต่อจากนี้ไดเรคทอรีย่อยที่จะสร้างเพิ่มไปอีกจะต้องอยู่ในข้อกำหนดของ Debian Package ชื่อไดเรคทอรีจะต้องตรงกับที่ Debian ต้องการ ตัวอย่างในไดเรคทอรี /home/priabroy/MyDebianPackages/ สร้างไดเรคทอรีดังนี้

DEBIAN
usr

  • ไดเรคทอรี usr ที่เราสร้างขึ้นมาจะจำลองไดเรคทอรีที่โปรแกรมเราตอนติดตั้งจริงๆว่าจะอยู่ที่ไหนในโครงสร้างไฟล์ของลีนุกซ์ อย่างผมตั้งใจว่าจะให้โปรแกรมไปอยู่ที่ /usr/bin ผมก็จะสร้างไดเรคทอรี bin ซ้อนอยู่ใน usr ดูรูปด้านล่างประกอบอีกที

โครงสร้างไดเรคทอรีที่ Debian กำหนด

  • ไดเรคทอรี DEBIAN (ตัวใหญ่) ไม่มีไดเรคทอรีย่อย แต่จะมีไฟล์สำคัญสองไฟล์ซึ่งจะยังไม่พูดในตอนนี้ มาดูไดเรคทอรี usr กันต่อ ที่ผมกล่าวไปแล้วคือมีไดเรคทอรีย่อยชื่อ bin สร้างไดเรคทอรีอีกอันคือ share และสร้างไดเรคทอรีย่อยอีกสองไดเรคทอรีคือ applications และ pixmaps (ดูรูปด้านบน ด้านซ้ายจะแสดงโครงต้นไม้)
4.Copy ไฟล์และสร้างไฟล์ Desktop Entry
      • usr/bin – ทำการ copy ไฟล์โปรแกรมของเราที่ได้ compile & build มาที่นี่

        ไดเรคทอรีเก็บโปรแกรมไบนารี

      • usr/share/pixmaps – ทำการ copy ไฟล์รูป png เป็น icon โปรแกรมมาไว้ที่นี่

ชื่อไฟล์ไอคอนของโปรแกรมของเรา

      • usr/share/applications – สร้างไฟล์ text มี extension เป็น .desktop ตัวอย่างที่พอจะเทียบเคียงได้คือไฟล์ลิงค์ .lnk ที่อยู่บนวินโดส์นั่นเองที่ได้จากการสร้าง shortcut ใช้ Text Editor สร้างไฟล์ใน Ubuntu ก็ Gedit อย่างตัวอย่างนี้ผมตั้งชื่อ autocheckpoint.desktop เนื้อในพิมพ์ดังนี้

[Desktop Entry]
Name=Autocheckpoint V1.2.20
Comment=Autocheckpoint (Human Resource Management System)
Exec=Autocheckpoint
Icon=autocheckpoint.png
Terminal=false
X-MultipleArgs=false
Type=Application
Categories=Application;Graphics;
StartupNotify=true
MimeType=application/x-autocheckpoint;
X-Ubuntu-Gettext-Domain=app-install-data

      • มาดูว่าใน [Desktop Entry] มีส่วนสำคัญอยู่หลายบรรทัดคือ Name เป็นชื่อโปรแกรมใส่เวอร์ชั่นเข้าไปหน่อย ตรง Comment ขยายความโปรแกรมของเรา ตรง Exec สำคัญคือชื่อไฟล์ต้องตรงกับในไดเรคทอรี usr/bin และต่อมาคือ Icon ชื่อต้องตรงกับไฟล์ใน usr/share/pixmaps ตรง Categories โปรแกรมของเราเมื่อติดตั้งแล้วจะไปอยู่ในกลุ่มไหน ซึ่งใน linux กลุ่มโปรแกรมผมคิดว่ายังไม่กว้างพอ ผมเลยจัดให้ไปอยู่ในกลุ่ม Graphics ซึ่งไม่น่าจะใช่ แต่ไม่มีตัวเลือกอื่นดีกว่านี้
5.ตรวจสอบขนาดไดเรคทอรี usr
  • ต่อไปจะต้องใช้คำสั่ง command line มาช่วยในการตรวจสอบขนาดของไฟล์ที่อยู่ในไดเรคทอรี usr ผมทำการเปลี่ยนไดเรคทอรีด้วยคำสั่ง cd ไปที่ /home/priabroy/MyDebianPackages/Autocheckpoint/autocheckpoint-1.2.20 สั่งหาขนาดของไฟล์และไดเรคทอรีด้วยคำสั่ง du ดังนี้ ขนาดที่ต้องการเป็น Kilobyte

$ du -ac –apparent-size –block-size=1024 usr
9774 usr/bin/Autocheckpoint
9778 usr/bin
1 usr/share/applications/autocheckpoint.desktop
5 usr/share/applications
4 usr/share/pixmaps/autocheckpoint.png
8 usr/share/pixmaps
17 usr/share
9798 usr
9798 total

  • จะเห็นขนาดของไฟล์และไดเรคทอรีเท่ากับ 9798 KB
6.สร้างไฟล์ control ในไดเรคทอรี DEBIAN
  • สร้างไฟล์ชื่อ control อยู่ในไดเรคทอรี DEBIAN โดยใช้ text editor

Package: autocheckpoint
Version:1.2.20
Section: graphics
Priority: optional
Architecture: i386
Depends: libgtk2.0-0 (>= 2.0), libgtk2.0-bin (>= 2.0), libfbclient2 (>=2.5)
Installed-Size: 9798
Maintainer: Prajuab Riabroy
Description: Autochekpoint (Human Resource Management System)

  • นำขนาด 9798 KB มาใส่ที่ Installed-Size ส่วนที่ยากที่สุดคือ Depends คือไลบรารีที่โปรแกรมเราต้องการ โปรแกรมนี้พัฒนาบน GNome จึงต้องการไลบรารีที่เป็นพื้นฐานคือ GTK2 สมมติฐานคือสามารถนำไปติดตั้งบนลีนุกซ์ที่ใช้ GNome ได้ไม่ว่าจะเป็นดิสโทรอะไร แต่ก็เพิ่มเติมอีกนิดว่าตอนนี้ GNome3 ใช้ GTK3 ดังนั้นการนำโปรแกรมไปติดตั้งบน GNome3 อาจจะต้องดาวน์โหลดไลบรารี GTK2 ด้วย
7.สร้างไฟล์ md5sums ในไดเรคทอรี DEBIAN
  • MD5 คือการเข้ารหัสให้กับไฟล์อีกรูปแบบหนึ่ง นิยมนำมาตรวจสอบขนาดของไฟล์ที่ได้จากการดาวน์โหลดว่าขนาดที่ได้รับมาสมบูรณ์หรือไม่ ถ้าไฟล์มีเนื้อหาตรงกับต้นฉบับทุกประการค่า MD5 จะเท่ากันเสมอ ตัวอย่างไฟล์ที่เราจะดาวน์โหลดบาง website จะมีค่า MD5 ใส่ไว้เมื่อเราดาวน์โหลดมาแล้วใช้คำสั่ง md5sum ในลีนุกซ์ตรวจสอบได้ ถ้าค่า MD5 เท่ากันก็แสดงว่าไฟล์ที่ดาวน์โหลดมานั้นสมบูรณ์
  • คำสั่ง md5sum จะตรวจได้ทีละไฟล์ซึ่งจะไม่สะดวก ผมแนะนำให้ไปดาวน์โหลดสคริปท์ ของ Nautilus ได้ที่ http://gnome-look.org/content/show.php/show.php?content=69749&vote=good&tan=7008025 ผู้เขียนใช้นามแฝงว่า ofir
  • ดาวน์โหลดมาแล้วย้ายไปไว้ที่ ~/.gnome2/nautilus-scripts ทำการเปลี่ยนโหมดเป็นไฟล์ที่รันได้ด้วยคำสั่ง

$sudo chmod +x md5.sh

script file สำหรับหา MD5

  • ผมใช้ Nautilus ไปที่ไดเรคทอรี /home/priabroy/MyDebianPackages/Autocheckpoint/autocheckpoint-1.2.20 คลิกที่ไดเรคทอรี usr คลิกเมนู File > Scripts จะเห็น script file ที่ติดตั้งเข้าไปคลิกเลือก ตัวสคริปท์จะสร้างไฟล์ชื่อ usr.md5 ให้เราทำการเปลี่ยนชื่อเป็น md5sums จากนั้นย้ายไปอยู่ใต้ในไดเรคทอรี DEBIAN ลองเปิดไฟล์ md5sums ทำการแก้ไขตรงชื่อไดเรคทอรีจากชื่อเต็มเป็นชื่อแบบ relative ดังรูปด้านล่าง

b3c83fe7e929f44cc38af95a38d765e5 usr/bin/Autocheckpoint
f11d86f6ae70aebb762c328499618e18 usr/share/applications/autocheckpoint.desktop
c3d930951fc3de48a65f072a390c08c7 usr/share/pixmaps/autocheckpoint.png

8.สร้าง Package
  • มาถึงขั้นตอนสุดท้ายทำการสร้าง Debian Package ด้วยคำสั่ง fakeroot dpkg –build ก่อนอื่นผมเปลี่ยนไดเรคทอรีมาที่ /home/priabroy/MyDebianPackages/Autocheckpoint
  • ผมตั้งชื่อ package ว่า autocheckpoint-1.2.20-i386.deb ใช้คำสั่งดังนี้

$fakeroot dpkg –build autocheckpoint-1.2.20 autocheckpoint-1.2.20-i386.deb

  • จะได้ package มาพร้อมจะลองไปทดสอบติดตั้ง

    package ที่รอคอย

ทดลองติดตั้ง

  • ถ้าเปิด Nautilus ใช้เมาส์ดับเบิ้ลคลิกบน package ถ้าเป็น Ubuntu จะเรียก Ubuntu Software Center เห็นหน้าตาดังรูปด้านล่าง เพราะผมทอลองติดตั้งไปหลายครั้งจึงขึ้นคำว่า Reinstall ถ้าเป็นครั้งแรกจะขึ้น Install

การติดตั้ง Package ผ่าน Ubuntu Software Center

  • หลังจากติดตั้งแล้ว

หลังจากติดตั้งแล้วใน Ubuntu GNome3

  • ก็ลงเป็นกรณีศึกษาว่าทำได้ง่าย ลองเปิดดูไฟล์ Debian Package ของคนอื่นๆดูด้วย Archive Manager อาจจะเห็นโครงสร้างไดเรคทอรีที่มากกว่า แต่ก็เป็นไปตามข้อกำหนด ถ้ามีคู่มือการใช้จะมีไดเรคทอรี usr/share/doc เพิ่มขึ้นมา
Categories: Lazarus, Linux, Programming ป้ายกำกับ:, , , ,

ยานยนต์สะเทินน้ำสะเทินบก…เหมาะสำหรับสภาวะน้ำท่วม

  • น้ำท่วมปีนี้ของบ้านเราหนักหนาสาหัสจริงๆ สมณะชีพราห์ม อาณาประชาราษฎร์ เดือดร้อนไปทุกข์หย่อมหญ้า ไม่เลือกยากดีมีจน ความจริงเรารู้ปริมาณน้ำฝนที่ตกลงมา ไม่ว่าจะมีพายุจะกี่ลูกก็ตาม เรื่องสำคัญคือเรื่องบริหารจัดการน้ำต่างหาก ที่จะผ่อนหนักให้เป็นเบา เขื่อนจะต้องพร่องน้ำเมื่อไหร่เท่าไหร่ตามปริมาณน้ำฝน
  • สำหรับบ้านเรา ด้าน GIS เรามีแบบจำลองความสูงคือ DEM ที่น่าจะละเอียดพอ มีดาวเทียมธีออสที่สามารถเห็นภาพจากท้องฟ้าได้แบบ real time หรือดาวเทียมดวงอื่นๆเป็นสิบดวง ที่นี้เมื่อแม่น้ำลำคลองไม่สามารถรับปริมาณน้ำได้จะต้องเอ่อล้นท่วมสองข้างฝั่ง ทิศทางมวลน้ำจะไหลไปทางไหน สามารถ simulate ได้ด้วยโปรแกรมด้าน GIS สำหรับกรุงเทพฯและปริมณฑลมีเวลา 2-3 เดือนเตรียมตัวน่าจะทำอะไรได้มากกว่านี้
  • สภาพความเป็นจริงแถบปริมณฑล พื้นที่อดีตส่วนใหญ่เป็นพื้นที่การเกษตร สามารถรับน้ำในยามน้ำหลาก แต่การพัฒนาในปัจจุบัน พื้นที่เหล่านี้ถูกถมเป็นที่อยู่อาศัย เป็นนิคมอุตสาหกรรมขนาดใหญ่ ทำให้ทิศทางของมวลน้ำจากที่เคยเอ่อล้นไปสะดวก ก็รวมตัวโจมตี จนกระทั่งนิคมอุตสาหกรรมแล้วนิคมเล่าจมน้ำ ความเสียหายเป็นมูลค่ามหาศาล คนตกงานอีกเป็นล้านคน
  • ผมมีเพื่อนอาศัยอยู่ที่อยุธยาแถวๆบางปะหัน เคยไปเที่ยวบ้านเพื่อนหลายสิบปีมาแล้ว บ้านเป็นบ้านไม้สองชั้น ชั้นล่างเปิดโล่ง ยังมีเรือไม้อยู่ หน้าแล้งจะเอามาชันยา หน้าฝนน้ำหลากก็ท่วมใต้ถุนบ้าน ใช้เรือนี่แหละในการสัญจร ก็คือเป็นวิถีชีวิตที่สอดคล้องกับสภาพภูมิประเทศดี ปัจจุบันอย่างที่เกาะเกร็ด นนทบุรีก็ยังเป็นแบบนี้อยู่ คนที่นั่นก็เลยไม่รู้สึกเดือดร้อนมากนัก

Amphibious Vehicle

  • แปลได้ตรงตัวว่า ยานยนต์ที่สามารถใช้ได้ทั้งในน้ำและบนบก ผมอ่าน Professional Surveyor Magazine ฉบับที่ 1 เดือน 8 ปี 2008 เห็นเป็นเรื่องยานยนต์ตัวนี้ ระบุใช้ในงานสำรวจที่เป็นพื้นที่ swamp คือน้ำไม่ลึกมากเช่นบึง หรือแม้กระทั่งป่าชายเลย พื้นที่แบบนี้ อาจจะมีพืชน้ำหรือกองไม้ระเกะระกะ ยากที่จะเดินไปสำรวจด้วยเท้า เมื่อมาเห็นน้ำท่วมบ้านเราแบบนี้ก็นึกถึงรถ/เรือแบบนี้ขึ้นมาทันที เลยกลับไปดูนิตยสารอีกครั้ง มีหลายเว็บไซท์ของอเมริกาที่ขายของแบบนี้ ที่ผมพูดถึงอยู่คือ HydraTrek หรืออีกเจ้าก็เป็น ArgoATV

ขับเคลื่อนหกล้อบนบก ในน้ำมีใบจักรสองใบอยู่ในท่อดูดน้ำและพ่น

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

ใบจักรอยู่ในท่อเมื่อลงน้ำลดความเสี่ยงที่ใบจักรจะไปฟันกิ่งไม้หรือหินในน้ำได้

ผลิตในบ้านเราได้ไหม?

  • ผมดูแล้ว ถ้ามีคนคิดและทำในบ้านเรา ทำได้ครับไม่มีอะไรจะไฮเทคเลิศเลอเลย แต่ปัญหาคือผลิตแล้วจะขายใครเท่านั้นละครับ บ้านเรามันเสียอยู่อย่างคืองานวิจัยและพัฒนามันน้อย ที่เห็นอุตสาหกรรมต่างๆส่วนใหญ่ในบ้านเราเป็นสถานีรับจ้างผลิตทั้งนั้น ตัว Amphibian นี้ถ้าจะทำมันยากอย่างเดียวคือระบบขับเคลื่อนด้วยใบจักรเมื่ออยู่ในน้ำ เพราะผมสังเกตดูแล้วไม่มีหางเสือสำหรับบังคับเลี้ยว ทีนี้งานก็ตกอยู่ที่ใบจักรสองใบในการหมุนด้วยรอบที่ไม่เท่ากันเพื่อให้เรือสามารถเลี้ยวได้ จากที่อ่านดูแล้วยานยนต์นี้ไม่มีโซ่ ไม่มีเกียร์บ็อกซ์หรือคลัทซ์ ทำงานด้วยระบบไฮโดรลิคล้วนๆ สนนราคาในอเมริกาประมาณ 1.5 ล้านบาท ถ้าสั่งมาบ้านเราเจอภาษีเข้าไปคูณสามเข้าไป คงมีแต่เศรษฐีที่ซื้อได้

ปีนป่ายที่สูงก็ทำได้ดี

เหมาะสำหรับงานกู้ภัย

  • ไหนๆพูดถึงเรื่องนี้แล้วขอเชียร์คนใกล้ๆหน่อย ผลงานที่เห็นดังรูปต่อไปเป็นของพี่พงษ์ชัย พงษ์ชวลิต เป็นแบ็คโฮสภาพสะเทินน้ำสะเทินบก ช่วงล่างรื้อแทร็คเดิมออกหมด แล้วออกแบบช่วงล่างใหม่ ตามรูปที่เห็นเป็นรุ่น 1 ตอนนี้ผ่านมาแล้ว 4-5 ปีน่าจะเป็นรุ่น 3 แล้ว คือทำงานได้ในน้ำตื้นได้ประมาณสัก 1-1.5 เมตร เจอน้ำลึกกว่านี้ก็ลอยตัวได้ เรื่องทำงานคงไม่ได้บึ๊กๆแบบอยู่บนแทร็คดั้งเดิมบนบกคืออาจจะเทอะทะไปบ้างตามข้อจำกัด แต่ก็ทำงานได้ดีกว่าใช้แรงคน ข้อจำกัดอีกอย่างคือการซ่อมบำรุงต้องมากขึ้น แต่มองแล้วคุ้มค่า
  • พี่พงษ์ชัยใช้หลักด้านวิศวกรรมเครื่องกล ผ่านการคิด ผ่านโปรแกรม 3D ที่วิเคราะห์เรื่องวัสดุที่ใช้ประกอบ ผ่านเรื่องแรงลอยตัวของน้ำ การพยุงตัวให้ได้สมดุล เอ้าพี่พงษ์ชัยสู้ต่อไปครับ มีเวลาว่างๆจะให้ออกแบบ ยานยนต์ amphibian ที่กล่าวมาข้างต้นนะครับ

แบ็คโฮสะเทินน้ำสะเทินบก

Unity vs Gnome3 หนีเสือปะจระเข้

เจ็บกว่านี้มีอีกไหม?

  • จากที่ใช้ลีนุกซ์มาหลายปีดีดัก Ubuntu นำลีนุกซ์เข้าสู่ยุคที่แสนจะใช้ง่ายที่เรียกว่าแกะกล่องใช้งานได้เลย (Work out of the box) จากวันนั้นเป็นต้นมาทุกอย่างดูลี่นไหลตลอดจนกระทั่งที่ผ่านมาสักปีหนึ่ง ผมจะเรียบเรียงความเจ็บที่ผมเจอ พร้อมทั้งแสดงวิธีแก้ช้ำ หลีกเลี่ยง หรือกระทั่งจะเลิกคบกันไปเลย

อันดับ 1 คือ Grub2

  •  ใช้งานได้ยากเย็นเหลือเกิน สละความง่ายไปเลือกความยาก (สำหรับผู้ใช้) การปรับแต่งไม่ยืดหยุ่นเหมือนเดิม ทุกครั้งที่ผมติดตั้ง Ubuntu หลัง PCLinuxOS ตัว Entry เข้า PCLinuxOS ที่ grub เขียนให้ไม่สามารถใช้ได้ ร้ายแรงขนาดกดสวิชต์โน๊ตบุ๊คไม่ดับ ต้องพลิกเครื่องมากถอดแบ๊ตเตอรีออก ถ้าพยายามเข้าไปแก้ grub.conf จะเจอแบบนี้ ที่ระบุว่าห้ามแก้ไข คู่มือแนะนำให้ไปแก้ไขใน grub.d ซึ่งก็เป็นอะไรที่ทำให้งง เมาหมัดเป็นชุด

ไฟล์คอนฟิค grub.cfg ที่ห้ามแก้ไข

  • วิธีบ่งหนองออกแก้ช้ำ ผมต้องใช้การบู๊ตด้วย LiveCD ของ SystemRescueCD มาแก้ grub ให้ไปใช้ของ PCLinuxOS ซึ่งยังเป็น grub 0.9 (legacy) อยู่ ซึ่งหลายๆดิสโทรยังไม่ยอมเปลี่ยนไปใช้ grub2 ความนี้ย่อมมีสาเหตุ

อันดับ 2 Unity

  • ก่อนหน้านี้เป็นสงครามวิวาทะกันพอสมควรระหว่างทีมพัฒนา  Gnome3 กับ Canocial ผู้พัฒนา Ubuntu ที่ไม่ลงรอยกันหลายๆเรื่องจนกระทั่ง Canocial ตัดสินใจทำ Desktop Environment ใหม่ขึ้นมาก็คือ Unity ที่ทำเอาผมเสียศูนย์ไปเลย 555 ตัว Compiz สุดที่รักมีอันต้องเป็นไป พยายามจูนมาใช้ ปรากฎว่าใช้ได้ประมาณ 1 ใน 4
  •  เมนูหลักเดิมหายไปไหน จะคลิกโปรแกรมแต่ละโปรแกรมทำไมมันต้องหลายคลิกเหลือเกิน คลิกซ้าย คลิกขวาตรง desktop เมนูหายไปไหนหมด  ปรับฟอนต์ระบบให้ใหญ่เล็กไม่ได้ (ทำได้ต้องหันไปติดตั้งและใช้ทูลส์ gnome-tweak-tool ยุ่งจริงๆ) ปรับฟอนต์ไม่ได้เพิ่มฟอนต์ก็ไม่ได้

หน้าจอ Unity ที่ Panel ด้านซ้ายดูทื่อเหลือเกิน

effects ใน compiz ใช้ได้ไม่ถึงครึ่ง

  • วิธีแก้ช้ำ ติดตั้งโปรแกรมจำพวก avant-window-navigator หรือไม่ก็ cairo-dock มาช่วย หนึ่งคลิกก็รันโปรแกรมที่เลือกได้แล้ว

นอกจาก compiz แล้วตัวสุดโปรดของผมคือ Cairo-Dock

  • วิธีแก้ถาวร ใช้สำนวนของกิมย้ง เรื่องอุ้ยเสี่ยวป้อที่พาลูกๆเมียๆหนีฮ่องเต้  “นับแต่นี้จะหลบเร้นหนีหาย” 555 คือหันไปใช้ Desktop ตัวอื่นเช่น Xfce หรือไม่ก็ KDE

อันดับ 3 Gnome3

  • Gnome3 ได้ชื่อว่าใช้ระยะเวลาในการพัฒนานานมากหลายๆปี แฟนๆ Gnome อย่างผมก็ตั้งหน้าตั้งตารอ หนีจาก Unity ก็ไปปะ Gnome3 เข้า ประมาณหนีเสือปะจระเข้ อะไรประมาณนั้น เจ็บๆไม่เจ็บยังไงดู comment ของคุณ Linus Torvalds ที่มีต่อ Gnome3 ว่า “Unholy mess” อู๊ย…..เจ็บไม่รู้จะเอาอะไรมาบรรยายแล้วครับ
  • Compiz นี้หนักกว่า Unity คือใช้ไม่ได้เลย ลักษณะการคลิกเรียกโปรแกรมต้องคลิกผ่าน Activities จำนวนการคลิกไม่ต่างจาก Unity แถบด้านซ้ายจะเรียกอะไรก็แล้วแต่ดูดีกว่า Unity  ที่เหมือน Unity มากคือ Desktop ไม่ใช่ที่วาง icon ของเราอีกต่อไป

Fedora 15 64bit รุ่น Gnome3 ที่ผมลองใช้งานอยู่

fedora 15 ในมุมหน้าต่างและ workspace

  • วิธีแก้ชั้ำชั่วคราว คือใช้ให้น้อยลง ไปลอง KDE ซึ่งตั้งแต่รุ่น 4.5 เป็นต้นมาใช้ได้ลื่นไหล สวย เนียน ลูกเล่นเยอะ ใช้ง่าย ใช้ไปนานๆมีอาการอืดๆนิดๆบ้าง ก็ไม่เป็นไร มี KWin ที่มาแทน Compiz ถึงจะไม่เทียบเท่าแต่ก็พอแทนกันได้ และแน่นอนอนาคตคงเพิ่ม effects จนไม่เห็นความแตกต่าง
  • หรือตัว Desktop Environment ที่กินทรัพยากรน้อยๆ บางเบาก็ต้องนุ่น Xfce ที่คุณ Linus Torvalds หันไปใช้นั่นแล

คำเตือน

  • นี่เป็นทัศนะส่วนบุคคลนะครับ ใครเป็นแฟนๆลีนุกซ์ดิสโทรไหนอย่าว่ากัน อ่านแล้วใช้วิจารณญาณด้วย ไปแล้วครับ 555…..
Categories: Linux ป้ายกำกับ:, , , , ,
Follow

Get every new post delivered to your Inbox.