ขั้นตอนการติดตั้ง PostGIS/Postgresql บน Ubuntu Server
ความเป็นมา

- Postgresql อ่านออกเสียงว่า โพสเกรส เป็นระบบจัดการฐานข้อมูล RDBMS ซึ่งพัฒนาโดย PostgreSQL Global Development Group ในปี 2550 ลักษณะเป็น opensource มีลิขสิทธิ์แบบ BSD เป็นซอฟท์แวร์แบบ cross-platform ใช้ได้ทั้ง Windows, Free BSD, Solaris, Linux และก็ Mac OS
- ย้อนหลังไปก่อนหน้านั้น ประวัติดั้งเดิม Postgresql พัฒนาต่อจากฐานข้อมูลชื่อ Ingres จึงเรียกว่า Post-Ingres (แปลง่ายๆว่า อินเกรสในตอนหลัง) ตอนหลังชื่อกลายเป็น Postgresql โครงการนี้สานต่อจากฐานข้อมูล Ingres ที่ยังมีปัญหา การพัฒนาเริ่มต้นในปี 2528 โดย Michael Stonebraker ที่ University of California, Berkeley
PostGIS
- PostGIS คือส่วนขยายเพิ่มเติมที่ทำให้ฐานข้อมูล Postgresql สามารถรองรับข้อมูลด้านสารสนเทศรูมิศาสตร์ (GIS) คือสนับสนุนข้อมูลที่สัมพันธ์เชิงพื้นที่ (Spatial) ในตอนที่เขียนอยู่เป็นรุ่น 1.5 ยังไม่สนับสนุนงานด้าน Raster ต้องรอรุ่น 2.0
- ผมจะเน้นเขียนถึงด้านนี้เพราะทีมงานของผมนำไปประยุกต์ใช้ควบคู่กับโปรแกรม GIS Desktop คือ Quantum GIS ซึ่งจะเป็นโปรแกรมที่เรียกใช้ฐานข้อมูล PostGIS จากเครื่อง Ubuntu Server ที่ลง PostGIS/Postgresql ไว้
![]()
- สำหรับฐานข้อมูลระดับใหญ่ที่ support ข้อมูลแบบสัมพันธ์กับเชิงพื้นที่ (Spatial) มี Oracle, Microsoft SQL Server, Informix Dynamic Server และก็ Postgresql ผ่านทางส่วนขยาย PostGIS ที่กล่าวไปแล้ว
ความนิยม
- ตอนนี้มีคนหันมาใช้ Postgresql กันมากขึ้น เพราะ MySQL ฐานข้อมูลยอดนิยมตอนแรกถูก Sun ซื้อไปคนยังไม่ตระหนกตกใจเท่าไหร่ แต่พอ Oracle ไปซื้อ Sun แล้วได้ MySQL มาด้วย ผู้ใช้ก็เกิดอาการอกสั่นขวัญแขวนว่า MySQL จะฟรีหรือเสียเงินต่อด้วยความไม่มั่นใจใน Oracle ผู้ใช้ตามองค์กรก็ย้ายจาก MySQL ไป Postgresql กันมากขึ้น
- Postgresql ที่เราใช้ฟรีกันทั่วไปพัฒนาโดยชุมชนที่ผมกล่าวไปแล้ว ถ้าเป็นรุ่น Enterprize ที่เทียบเคียงกับ Oracle, DB2, MS SQL Server พัฒนาโดย EnterprizeDB โดยการพัฒนาต่อยอดจาก Postgresql แต่เป็นโค๊ดปิด
- ตัวอย่างก็คือ Redhat ที่กระโดดเข้าไปลงทุนใน EnterprizeDB ทั้งที่ก่อนหน้านี้โซลูชั่นของ Redhat ก็ผูกอยู่กับ MySQL แต่มีความเสี่ยงสูงเพราะ Oracle เป็นคู่แข่งโดยตรงกับ Redhat และที่ไม่ลืมคือ IBM เข้าไปลงทุนกับ EnterprizeDB ก่อน Redhat ซะอีก (ทั้งที่ IBM ก็มี DB2 อยู่แล้ว)
ขั้นตอนการติดตั้ง
- สำหรับ Ubuntu Server ที่ใช้อยู่เป็น 64 บิต ตามธรรมเนียมของเซิฟเวอร์ดั้งเดิมคือไม่มีระบบ Desktop คำสั่งที่ใช้เป็น command line ทั้งหมด แต่หลังๆก็เห็น Centos Server ทำเป็น Desktop แต่ดูๆแล้วกราฟฟิคค่อนข้างเรียบง่าย เบาๆ ไม่กินแรมมาก เพราะต้องสงวนแรมให้กับ service/process ของเซิฟเวอร์
- สำหรับ server ก็ยังเป็นเดี่ยวๆไม่มี cluster เพราะ user ยังไม่มาก ไม่เกิน 20 คน ตัว server รับงานได้ลื่นไหล
ติดตั้ง PostGIS/Postgresql
- ใช้ putty ล็อกอิน เข้าไป server หรือไปนั่งหน้า server แล้วก็บรรเลงเลยครับ ตอนนี้เมเจอร์เวอร์ชั่นออก 9,1 แล้วแต่ใน Ubuntu Server ยังเป็น 8.4 อยู่
$sudo apt-get install postgresql-8.4 postgresql-contrib-8.4 postgresql-8.4-postgis
- แก้ไขไฟล์ config ชื่อ pg_hba.conf
$sudo nano /etc/postgresql/8.4/main/pg_hba.conf
- ระบุว่า IP Address สามารถเข้ามาใช้งาน server ได้ เพิ่มบรรทัดนี้เข้าไปโดยที่หมายเลข IP Address แก้ไขให้ตรงกับที่ใช้
host all postgres 192.168.5.0/24 md5
- แก้ไขไฟล์ config ชื่อ postgresql.conf เพื่อให้การ remote จากเครื่องอื่นที่ใช้เช่น pgAdmin เข้าไปใช้ server ได้
$sudo nano /etc/postgresql/8.4/main/postgresql.conf
- แก้ไขบรรทัดโดยการยกเลิก comment ที่บรรทัด listen_address = ‘localhost’ ให้เป็น
listen_address = '*'
- ทำการ restart service ของ postgresql
$sudo /etc/init.d/postgresql restart
- หลังจากติดตั้ง postgresql แล้วจะมี user และ group ชื่อ postgres ขึ้นมาซึ่งจะเป็น user ผู้ดูแลระบบของ linux ที่มีสิทธิ์ในการแก้ไข database ทำการเปลี่ยน password ของ user ชื่อ postgres ให้กับ Ubuntu ก่อน โดยป้อนรหัสของไปสองครั้ง สมมติว่าเป็น ‘mypostgres143′
$sudo passwd postgres
- เปลี่ยน user เป็น postgres เพื่อจะทำการแก้ไข password เพื่อให้สามารถล็อกอินไปแก้ไข database ได้ password ที่ใส่เข้าไปต้องให้ตรงกับ Ubuntu คือ ‘mypostgres143′
$sudo su postgres
$psql -c"ALTER user postgres WITH PASSWORD 'mypostgres143'"
- สร้างเท็มเพลตของฐานข้อมูลที่เป็นต้นแบบสำหรับงาน GIS (ยังใช้ user ชื่อ postgres อยู่)
$createdb postgistemplate
- ตอนนี้ฐานข้อมูลชือ postgistemplate ยังเป็นฐานข้อมูลต้นแบบสำหรับ postgresql ทั่วๆไปต่อไปจะปรับโครงสร้างให้รองรับงาน GIS
$createlang -d postgistemplate plpgsql
$psql -q -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql $psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql
- สร้าง Group role แล้วค่อยมอบสิทธิ์ให้ user ต่อไปพิมพ์คำว่า psql ตรงคอมมานด์ไลน์ เพื่อจะใช้ภาษา sql ได้เต็มๆ ตรงพร็อมต์จะกลายเป็น postgres# ผมสร้าง group role ที่ชื่อ gisgroup ขึ้นมา จำกัดสิทธิ์ให้สร้าง Database ได้เท่านั้น
#CREATE ROLE gisgroup NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE;
- สร้าง user ชื่อ gis ด้วยพาสเวิร์ด ‘mypuppet’
#CREATE ROLE gis LOGIN PASSWORD 'mypuppet' NOINHERIT;
- แล้วมอบอาญาสิทธิ์หรือบทบาทจาก gisgroup ให้ด้วยคำสั่ง GRANT ออกจากโหมด sql ด้วยคำสั่ง \q
#GRANT gisgroup TO gis;
#\q
มอบสิทธ์ 2 ตารางข้อมูล spatial ให้แก่ผู้ใช้ที่กำหนด
- สองตารางข้อมูลที่สนันสนุนเรื่อง spatial ที่สร้างมาด้วยตัวส่วนขยาย PostGIS คือ geometry_columns และ spatial_ref_sys เราจะมอบสิทธิ์เต็มแก่ผู้ใช้ชื่อ gis (ไม่ลืมที่จะเปลี่ยน user อื่นเป็น postgres)
$psql -d postgistemplate -c "ALTER TABLE geometry_columns OWNER TO gis;"
$psql -d postgistemplate -c "ALTER TABLE spatial_ref_sys OWNER TO gis;"
สร้างฐานข้อมูลสำหรับใช้งานจริง
- ใช้คำสั่งสร้างฐานข้อมูลจาก template ที่เราสร้างไว้แล้วชื่อ postgistemplate ฐานข้อมูลที่จะสร้างใหม่ชื่อ cpendb ให้สิทธิ์ผุ้ใช้ชื่อ gis
$createdb -T postgistemplate cpendb -O gis
ติดตั้งทูลส์สำหรับ Postgresql
- ต่อไปเครื่องมือสำหรับรีโมตเข้าไปบริหารฐานข้อมูล Postgresql จากเครื่องคอมพิวเตอร์ของเรามีให้เลือกใช้แบบ stand alone หรือรันบนอินเทอร์เน็ต เบราเซอร์ก็มี เป็นของฟรี ตัวแรกก็ pgAdmin3 นั้นแจ๋วที่สุดมีให้ใช้ทั้งบนลีนุกซ์หรือทางฝั่งวินโดส์ หรือจะไปใช้ phpPgAdmin บน internet browser ก็ได้แล้วแต่ความชอบ
- ถ้าเราใช้ ubuntu หรือ ลีนุกซ์ Mint เป็น desktop ติดตั้งง่ายๆด้วย $sudo apt-get install pgadmin3 ติดตั้งแล้วมาดูว่าจะเข้าไป access ฐานข้อมูล cpdb ที่ติดตั้งเข้าไปแล้วอย่างไร เปิดโปรแกรม pgAdmin3 ใช้เมนู File > Add Server…
- สำหรับผู้ใช้ pgAdmin3 ส่วนใหญ่จะเป็นสิทธิ์ Admin กันอยู่แล้ว ดังนั้น Username ที่ใช้จะเป็น ‘postgres‘ ซึ่งมีสิทธิ์สูงสุด ใส่ password เป็น ‘mypostgres143‘ ส่วน Name เป็นชื่อ Server (ตั้งอะไรก็ได้ในสื่อความหมาย) ส่วน Host เป็นเลข IP ของเซิฟเวอร์ในวงแลนของเราอย่างของผมเป็น 192.168.5.111 เสร็จแค่นี้ถ้าไม่มีอะไรผิดพลาดจะเห็นฐานข้อมูล cpendb ที่เราสร้างไว้ก่อนแล้ว
ใช้ปลั๊กอินของ Quantum GIS แปลง shape file เข้าไปเก็บในฐานข้อมูล
- การปั๊ม shape file เข้าไปเก็บในฐานข้อมูล PostGIS ใช้ SPIT ซึ่งเป็นปลั๊กอินของ Quantum GIS นั้นง่ายที่สุด เมื่อเปิด QGIS แล้วคลิกที่เมนู Database > SPIT > Import Shapefile to PostgreSQL ขั้นแรกสร้าง connection ไปที่ฐานข้อมูลPostGIS ก่อน ด้วยการคลิกที่ New
- ขั้นต่อไปให้พารามิเตอร์ที่จะติดต่อกับ Server ตั้งชื่อ Host ให้ตรงกับ IP Address ส่วนฐานข้อมูลคือ ‘cpendb’ ที่เราเพิ่งสร้างไป และ Username ‘gis’ Password ‘mypuppet’
- ก่อนจะเพิ่ม Shape fiel คลิกที่ปุ่ม Connect ดูถ้าสำเร็จก็คลิกที่ Add เพื่อเพิ่ม Shape file เข้าไปเก็บในฐานข้อมูล PostGIS ที่เครื่อง Server สามารถ Add ได้ทีละหลายไฟล์ จากนั้นจะเป็นกระบวนการปั๊มข้อมูลเข้า server ถ้าข้อมูลไม่ใหญ่ก็ไม่ต้องรอนานมาก
- หลังการเพิ่ม Shape file ไปที่ฐานข้อมูล PostGIS แล้วเราจะไม่เห็นอะไรเพิ่มมาที่ Map ให้ไปคลิกที่ไอคอนของ QGIS คือ Add PostGIS Layer เลือกตารางที่ต้องการด้วยการ
- จะเห็นตารางข้อมูลที่เลือกเพิ่มมาแสดงบน Map ของ QGIS
สรุปการใช้งาน PostGIS
- เมื่อฐานข้อมูลถูกย้ายมาที่ PostGIS แล้ว ข้อดีคือสามารถให้ user หลายๆคนเข้ามา access ฐานข้อมูลเพื่อแก้ไข update Attribute หรือแม้กระทั่งใช้ทูลส์เช่น QGIS เข้ามาแก้รุปร่าง Vector ได้พร้อมๆกัน
- เพียงแต่ต้องมีการจำกัดสิทธิ์ user สำหรับผู้ใช้บางคน ซึ่งการให้สิทธิ์ผู้ใช้บางคนมีสิทธิ์แก้ไขได้เฉพาะบางฟิลด์ ไม่มีสิทธิ์เพิ่มหรือลบ record ได้ เป็นเรื่องปลีกย่อยที่ผู้อ่านต้องไปศึกษาต่อครับ
- สำหรับ PostGIS รุ่น 2.0 ที่จะออกในวันข้างหน้าก็จะสนับสนุนเรื่อง Geo Raster ก็เป็นรุ่นที่รอคอยครับว่าจะทำได้ดีขนาดไหน
การนำเข้าข้อมูลจากไฟล์ CSV เป็นลายเส้น Polygon ใน QGIS
การนำเข้าข้อมูลจากไฟล์ CSV เป็นลายเส้น Polygon
- ก็ถือว่าเป็นทิปและทริคเล็กๆน้อยๆ ในกรณีสร้าง Vector ที่เป็นรูป Polygon จากข้อมูลดั้งเดิมที่เป็นไฟล์ Excel แล้วแปลงเป็น CSV นำมาสร้างเป็นรูป Vector ใน Quantum GIS ซึ่งโปรแกรมด้าน GIS ที่ฟรีและเปิดโค๊ด cross-platform ในแวดวง GIS คงรู้จักกันดี ข้อมูลในเบื้องต้นที่จะนำมาทดสอบเป็นตัวอย่างคือ
- ไฟล์รูปแปลงที่ดิน งานสำรวจในภาคสนามจะได้มาเป็นค่าพิำกัด UTM และมี ID สำหรับรูปแปลงที่ดินไว้ด้วย ส่วนใหญ่แล้วเมื่อได้ค่าพิกัดแปลงที่ดินจากสนามแล้ว Draftman จะทำการสร้างรูปใน Autocad เพื่อตรวจสอบรูปร่าง ซึ่งการนำไฟล์ CAD แปลงเป็นฟอร์แม็ต้าน GIS ทำได้หลายโปรแกรมเช่นเปิดไฟล์ CAD ด้วย Global Mapper ทำการสร้าง attribute เพื่อเก็บ ID รูปแปลงที่ดิน แต่ในกรณีผมขอย้อนไปจุดเริ่มว่าถ้ามีไฟล์แบบ CSV และเก็บรูปแปลงเป็นค่าพิกัดเรียงไปตามลำดับจะทำอย่างไร?
- ไฟล์Attribute เก็บ Parcel_ID แปลงที่ดินพร้อมคุณสมบัติต่างเช่น ชื่อแปลงที่ดิน, ชื่อกลุ่มแปลงที่ดิน
ความต้องการขั้นต้นใน QGIS
- ต้องการ Plug-in ชื่อ “Add Delimited Text Layer” เป็นปลั๊กอินที่มากับ QGIS ตั้งแต่ติดตั้งเสร็จตอนแรกไม่แสดง ต้องทำการเลือกก่อนผ่านเมนู Plugins > Manage Plugins… ทำเครื่องหมายเลือกให้กับ “Add Delimited Text Layer” เท่านี้ก็ใช้ได้
- ต้องการ Plug-in ชื่อ “Points2One” ปลั๊กอินตัวนี้ไม่ได้มาแต่แรก ต้องติดตั้งเพิ่มผ่านทางเมนู Plugins > Fetch Python Plugins… ต้องอินเทอร์เน็ตด้วยจึงจะดาวน์โหลดแล้วติดตั้งได้
- ต้องการ Plug-in ชื่อ “MMQGIS”เหมือนกับตัวบนคือต้องติดตั้งเพิ่ม
- Plug-in ชื่อ “fTools” มากับ QGIS ตั้งแต่แรกแล้ว
ขั้นตอนการทำงาน
- รวมไฟล์แปลงที่ดินเป็นไฟล์เดียว ถ้าไฟล์แปลงที่ดินเก็บแยกไฟล์กันให้นำมารวมเป็นไฟล์ CSV ไฟล์เดียวจะสะดวกมาก แต่ละวงของ polygon จะต่างกันที่ Parcel_ID
นำเข้าไฟล์ CSV
- ใช้ปลั๊กอิน “Add Delimited Text Layer” ทำการอ่านไฟล์ CSV ของเรา ผลลัพธ์จะอยู่ในรูปจุด (Point) แต่ละจุดจะมี Parcel_ID ที่ต่างกัน และในกลุ่มจุดที่ Parcel_ID เดียวกัน QGIS จะสร้าง feather_id ให้ตามลำดับการนำเข้า
แปลงข้อมูลจุด (Point) เป็นลายเส้น (Polygon)
ใช้ปลั๊กอิน “Points2One” ทำการรวมจุดที่มี Parcel_ID เดียวกันเป็น Polygon สืบจากข้อ 2 ปลั๊กอินนี้จะมองหา Parcel_ID เดียวกันแล้วลำดับ feather_id เริ่มลากเส้นจาก feather_id เท่ากับ 1 จนไปสิ้นสุดตัวสุดท้ายแล้วทำการปิดรูปให้
Join Attribute
- เตรียมไฟล์ Attribute ของเดิมอาจจะเป็น Export ทำการ Export เป็น CSV ที่สำคัญคือต้องมีคอลัมน์ใดคอลัมน์หนึ่งที่มีเลข Parcel_IDเป็นหมายเลขแปลงที่ดิน ตัวอย่างชื่อคอลัมน์คือ Par_ID ทึ่จะเชื่อมโยงไปยังรูป polygon แปลงที่ดิน
- ใช้ปลั๊กอิน “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 ที่ไม่สามารถหาคู่กันเจอ
- หลังจาก Join แล้วลองปรับการแสดงผลดูได้ดังรูป
- ลองเปิด table ของ layer ที่ join แล้วดู
การประมวลผลในเบื้องต้น
- มาลองใช้ปลั๊กอินในการประมวลผลดู ปลั๋กอินตัวนี้ชื่อ fTools มาพร้อมกับ QGIS แต่ต้อง enable ก่อนถึงจะใช้งานได้ สำหรับ GIS แล้วการทำ processing เพื่อประมวลผลหาผลลัพธ์ที่ต้องการคือหัวใจของงาน GIS เมื่อได้ผลลัพธ์แล้วต่อไปก็คือการทำ Report และแสดง map สำหรับผลลัพธ์นั้นๆ
- โจทย์ก็มีว่าถ้ามีแนวถนนกว้างเท่ากับ 100 เมตร (จริงแล้วคือเขตถนนหรือ right of way) ผ่านเข้าไปในแปลงที่ดิน ให้ประมวลผลว่าเข้าไปในแปลงไหนพร้อมแสดงเป็น map
- ข้อมูล (layer) ที่จะนำมาประมวลผลสมมติว่ามี polyline (เส้นเดี่ยวไม่มีความกว้าง) ที่แทนแนวถนนตัดผ่านแปลงที่ดิ ผมนำเข้าถนนเข้าดังรูป
- ต่อไปจะขยายถนนให้ได้ขนาดกว้าง 100 เมตรด้วยการทำ Buffer ด้วยปลั๊กอืน fTools ใช้เมนู Vector > Geoprocessing Tools > Buffer ป้อนค่าใส่ไดอะล็อกดังรูป
- ต่อไปจะหา polygon แปลงที่ดินที่ถูกตัดด้วยขอบเขตถนน 100 เมตรที่ตัดผ่าน ที่เมนู Vector > Geoprocessing > Intersect ใส่ค่าไปตาม dialog ดังรูปด้านล่าง
ผลลัพธ์ที่ได้
- ลองเปิดดู Attribute table ของ layer ที่ได้จากการ intersect
สรุป
- สำหรับผมแล้วใช้ QGIS เป็นหลักเพราะไม่ได้ใช้ฟังก์ชั่นการวิเคราะห์ที่ลึกซึ้งนัก ความเร็วของ QGIS ก็ไม่เลวเปิดรูปประมาณ 3 กิกะไบต์ก็ยังไปได้ แต่ขาดเรื่องการจัดปรินต์ Layout ที่ยังไม่ดีพอ อีกอย่างคือการ label ยังไม่เก่ง แต่ฟีเจอร์ต่างๆทางทีมผู้พัฒนาก็ปรับปรุงไปเรื่อยๆครับ
การกลับมาของ 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 ไปด้วย ปีหน้าจะซื้อโน๊ตบุ๊คเครื่องใหม่คงได้ลองฟีเจอร์เด็ดๆดูกัน
- ผมนำโค๊ดจากตัวอย่างมาปรับเพิ่ม effect บางอย่างมาเขียนเป็นเมนู Aboutของโปรแกรมแสดงข้อมูลที่เกี่ยวข้องกับโปรแกรมเช่นชื่อโปรแกรม รุ่นของโปรแกรม ผู้พัฒนาก็ได้ผลดังรูปด้านล่าง แสดงรูปของทีมงานผู้พัฒนาโปรแกรมหมุนรอบ effect ไฟ คล้ายนั่งม้าหมุนที่นั่งกันสมัยเด็ก
ก่อนจากกัน
- ถ้าสนใจจะลองไลบรารี GLScene บน Lazarus ถ้าดาวน์โหลดมาแล้วใช้ไม่ได้ก็ลองขอมาดู ผมจะนำไฟล์ไปฝากไว้แถวๆ file share ครับ โลกนี้ถ้ามีแต่ไมโครซอฟท์วินโดส์ อย่างเดียวโลกนี้คงเหงาพิลึก ความคาดหวังของผมแล้ว OpenGL ไม่ต้องเหนือกว่า Direct3D แต่ขอให้เทียบเท่าก็พอ เพราะสินค้าที่ผลิตมาเพื่อการพาณิชย์จากยักษ์ใหญ่ย่อมมีกำลังที่เหนือกว่า
เครดิต
- เรื่อง OpenGL ที่เขียนมาเกือบทั้งหมดผมเรียบเรียงมาจาก
http://openglbook.com/the-book/
เนื่องจากไม่มีวิทยาการที่ลึกซึ้งกับ OpenGL ผิดพลาดประการใดก็ขออภัยครับ
วิธีสร้าง 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 ไดเรคทอรี
- ผมยกตัวอย่างให้เห็นความแตกต่างโปรแกรม Traverse Pro ต้องการไลบรารีพื้นฐานคือ GTK2 ส่วนอีกสองโปรแกรมคือ AutocardMaker และ Autocheckpoint นอกเหนือจากไลบรารี GTK2 แล้วต้องการไลบรารีของฐานข้อมูล Firebird
2.สร้างไดเรคทอรีรองตามรุ่นของโปรแกรม
- เราจะสร้างไดเรคทอรีย่อยลงไปอีกแต่ละโปรแกรมเพื่อเก็บ package แยกเป็นเวอร์ชั่น ตัวอย่าง Traverse Pro ของผมตอนนี้รุ่น 2.0.1 โปรแกรม Autocheckpoint รุ่น 1.2.20
3.สร้างไดเรคทอรีย่อยตามข้อกำหนด
- ต่อจากนี้ไดเรคทอรีย่อยที่จะสร้างเพิ่มไปอีกจะต้องอยู่ในข้อกำหนดของ Debian Package ชื่อไดเรคทอรีจะต้องตรงกับที่ Debian ต้องการ ตัวอย่างในไดเรคทอรี /home/priabroy/MyDebianPackages/ สร้างไดเรคทอรีดังนี้
DEBIAN
usr
- ไดเรคทอรี usr ที่เราสร้างขึ้นมาจะจำลองไดเรคทอรีที่โปรแกรมเราตอนติดตั้งจริงๆว่าจะอยู่ที่ไหนในโครงสร้างไฟล์ของลีนุกซ์ อย่างผมตั้งใจว่าจะให้โปรแกรมไปอยู่ที่ /usr/bin ผมก็จะสร้างไดเรคทอรี bin ซ้อนอยู่ใน usr ดูรูปด้านล่างประกอบอีกที
- ไดเรคทอรี 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
- ผมใช้ 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 มาพร้อมจะลองไปทดสอบติดตั้ง
ทดลองติดตั้ง
- ถ้าเปิด Nautilus ใช้เมาส์ดับเบิ้ลคลิกบน package ถ้าเป็น Ubuntu จะเรียก Ubuntu Software Center เห็นหน้าตาดังรูปด้านล่าง เพราะผมทอลองติดตั้งไปหลายครั้งจึงขึ้นคำว่า Reinstall ถ้าเป็นครั้งแรกจะขึ้น Install
- หลังจากติดตั้งแล้ว
- ก็ลงเป็นกรณีศึกษาว่าทำได้ง่าย ลองเปิดดูไฟล์ Debian Package ของคนอื่นๆดูด้วย Archive Manager อาจจะเห็นโครงสร้างไดเรคทอรีที่มากกว่า แต่ก็เป็นไปตามข้อกำหนด ถ้ามีคู่มือการใช้จะมีไดเรคทอรี usr/share/doc เพิ่มขึ้นมา
ยานยนต์สะเทินน้ำสะเทินบก…เหมาะสำหรับสภาวะน้ำท่วม
- น้ำท่วมปีนี้ของบ้านเราหนักหนาสาหัสจริงๆ สมณะชีพราห์ม อาณาประชาราษฎร์ เดือดร้อนไปทุกข์หย่อมหญ้า ไม่เลือกยากดีมีจน ความจริงเรารู้ปริมาณน้ำฝนที่ตกลงมา ไม่ว่าจะมีพายุจะกี่ลูกก็ตาม เรื่องสำคัญคือเรื่องบริหารจัดการน้ำต่างหาก ที่จะผ่อนหนักให้เป็นเบา เขื่อนจะต้องพร่องน้ำเมื่อไหร่เท่าไหร่ตามปริมาณน้ำฝน
- สำหรับบ้านเรา ด้าน 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 ซึ่งก็เป็นอะไรที่ทำให้งง เมาหมัดเป็นชุด
- วิธีบ่งหนองออกแก้ช้ำ ผมต้องใช้การบู๊ตด้วย 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 ยุ่งจริงๆ) ปรับฟอนต์ไม่ได้เพิ่มฟอนต์ก็ไม่ได้
- วิธีแก้ช้ำ ติดตั้งโปรแกรมจำพวก avant-window-navigator หรือไม่ก็ 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 ของเราอีกต่อไป
- วิธีแก้ชั้ำชั่วคราว คือใช้ให้น้อยลง ไปลอง KDE ซึ่งตั้งแต่รุ่น 4.5 เป็นต้นมาใช้ได้ลื่นไหล สวย เนียน ลูกเล่นเยอะ ใช้ง่าย ใช้ไปนานๆมีอาการอืดๆนิดๆบ้าง ก็ไม่เป็นไร มี KWin ที่มาแทน Compiz ถึงจะไม่เทียบเท่าแต่ก็พอแทนกันได้ และแน่นอนอนาคตคงเพิ่ม effects จนไม่เห็นความแตกต่าง
- หรือตัว Desktop Environment ที่กินทรัพยากรน้อยๆ บางเบาก็ต้องนุ่น Xfce ที่คุณ Linus Torvalds หันไปใช้นั่นแล
คำเตือน
- นี่เป็นทัศนะส่วนบุคคลนะครับ ใครเป็นแฟนๆลีนุกซ์ดิสโทรไหนอย่าว่ากัน อ่านแล้วใช้วิจารณญาณด้วย ไปแล้วครับ 555…..
FSArchiver เครื่องมือเขียน Image ของฮาร์ดดิสค์ มาแบบเงียบและทรงพลัง
FSArchiver
- เป็นเครื่องมือระบบในการจัดเก็บไฟล์ ไดเรคทอรีหรือแม้กระทั่งพาร์ทิชั่นแบบบีบอัดไปยังไฟล์ปลายทาง สามารถนำมาแบ็คอัพข้อมูลได้หรือเขียน image ของฮาร์ดดิสค์ได้เป็นอย่างดี (หรือที่ชอบเรียกกันว่าโคลนนิ่งฮาร์ดดิสค์หรือโคลนนิ่งพาร์ทิชั่น) และในภายหลังสามารถนำไฟล์มา restore ได้
- ความสามารถที่เหนือกว่า Partimage ที่ผมเคยเขียนไปแล้วมีหลายอย่าง ที่สำคัญมากคือสามารถอ่านและเขียนระบบไฟล์ ext4 ของลินุกซ์ได้ และอีกอย่างคือสามารถอ่านและเขียนจากพาร์ทิชั่นต้นทางไปยังพาร์ทิชั่นปลายทางที่มีขนาดต่างกันได้ ตราบเท่าที่ขนาดพาร์ทิชั่นปลายทางยังมีเนื้อที่พอให้เขียน
- สนใจ FSArchiver ติดตามได้ที่นี่
คำเตือน
- ก่อนจะเอาไปใช้ดูคำเตือนของโปรแกรมด้วย “ยังเป็นรุ่นที่กำลังพัฒนาอยู่ อย่านำไปใช้กับข้อมูลที่สำคัญยิ่งยวด” เท่าที่ผมใช้งานยังไม่พบปัญหาเลยครับ
การประยุกต์ใช้งาน
- FSArchiver นั้นถูกรวมมากับ SystemRescueCD เวลาใช้งานคือไปดาวน์โหลด SystemRescueCD เป็นไฟล์ ISO จากนั้นจัดการทำบู๊ตด้วยแผ่น CD หรือด้วย Flash drive ก็ยิ่งดีเพราะสามารถฟอร์แม็ตทิ้งแล้วนำไปใช้งานอื่นต่อได้ เมื่อต้องการบู๊ต SystemRescurCD ก็สามารถนำมาทำใหม่ได้
- การทำบู๊ตด้วย flash drive มีหลายวิธีที่เว็ปไซค์ของ SystemRescueCD แนะนำคือใช้โปรแกรม linuxliveusb เป็นทูลส์ตัวเล็กๆรันบนวินโดส์เท่านั้น ฟรี opensource ใช้ง่าย เขียนบู๊ตได้กับลินุกซ์ได้เกือบทุกดิสโทร
ข้อจำกัดการใช้งานคือใช้ไม่ได้กับ Ubuntu ก่อนรุ่น 8.04, Mandriva และ ISO สำหรับบู๊ตวินโดส์
- ผมเสียดาย Unetbootin หลังจาก SystemRescueCD รุ่น 1.5.x เป็นต้นมาไม่สามารถนำมาใช้งานได้ ทั้งที่ยังใช้งานทำบู๊ตให้กับลีนุกซ์อื่นๆได้เกือบทุกดิสโทร
- ข้อจำกัดของ FSArchiver คือเป็นคำสั่งมือ (command line) แต่ขอบอกว่ามันง่ายมากเลยแค่บรรทัดเดียว ขอให้ผู้ใช้มีความรู้ด้านการเมาท์พาร์ทิชั่นก่อนจะสั่ง FSArchiver ทำงานก็พอ
วิธีการใช้งาน
บู๊ต
- มาดูการใช้งานหลังจากทำบู๊ตด้วย flash drive แล้วทำการบู๊ตเครื่องเข้า SystemRescueCD ใช้คำสั่ง startx เพื่อเข้าสู่โหมดกราฟฟิค
#startx
เมาท์พาร์ทิชั่น
- ตรวจดูพาร์ทิชั่นที่จะเมาท์เพื่อเก็บ image ใช้ GParted ก็ได้แต่ง่ายที่สุดคือใช้ FSArchiver ด้วย option ต่อไปนี้
#fsarchiver probe simple
- รูปด้านบนผมมี external hard disk เสียบอยู่กับคอมพิวเตอร์ device ที่เห็นคือ sdd พาร์ทิชั่นที่ต้องการจัดเก็บคือ sdd1 ส่วนฮาร์ดดิสค์ลูกที่อยู่ในเครื่องคือ sda และพาร์ทิชั่นที่ต้องการเขียนเป็น Kubuntu คือ sda9 ก่อนจะทำการเมาท์ต้องสร้างไดเรคทอรีก่อนผมตั้งชื่อ 500ext4 เพื่อให้สอดคล้องกับชื่อ label ที่ตั้งไว้คือ PJ500GBExt4 (ขนาด 500 GB ระบบไฟล์เป็น ext4) เมาท์ด้วยคำสั่ง mount เพราะระบบไฟล์เป็น ext4 (ถ้าระบบไฟล์เป็น ntfs ต้องใช้คำสั่ง ntfs-3g)
#mkdir /mnt/500ext4
#mount /dev/sdd1 /mnt/500ext4
เขียน Image
- ทำการเขียน image ด้วยคำสั่ง fsarchiver ด้วย optionแรก savefs ระบุว่าต้องการจัดเก็บระบบไฟล์ option ที่สองคือปลายทางไฟล์และพาทที่ต้องการจัดเก็บไปไว้(ไฟล์ชื่อ kubuntu2 ซึ่ง fsarchiver จะเพิ่ม extension เป็น fsa ให้อัตโนมัติ) option สุดท้ายคือพาร์ทิชั่นต้นทางที่ต้องการเขียน image หรือโคลน
#fsarchiver savefs /mnt/500ext4/partimages/kubuntu/kubuntu2 /dev/sda9
มาแบบเงียบๆ
- ที่จั่วหัวว่ามาแบบเงียบๆ ก็ตรงที่เขียน image ไม่มีการบอก progress อะไรๆทั้งสิ้น ไม่มีการบอกเวลาที่จะสิ้นสุด แต่ทำงานเร็วมาก ความรู้สึกว่าเร็วกว่า partimage มาก ต่อไปในขณะที่อ่านและเขียน จะแอบไปดูปลายทางกันว่าได้ไฟล์ขนาดเท่าไหร่แล้ว เปิด terminal มาอีกตัว ใช้คำสั่ง cd เข้าไปแล้วใช้คำสั่ง list ดูชื่อไฟล์และขนาด
สิ้นสุดการอ่านและเขียน
- สำหรับพาร์ทิชั่นของ Kubuntu ของผมไม่ใหญ่มากขนาดประมาณ 20 GB ใช้ไปประมาณ 13.6 GBบีบแล้วได้ขนาดประมาณ 6.7 GB เมื่อ process สิ้นสุด FSArchiver จะแสดงข้อความว่าทำอะไรไปบ้าง
การ Restore Archive
- เมื่อต้องการ restore image กลับมาเหมือนเดิม ขั้นตอนคล้ายข้างต้นตั้งแต่บู๊ต เมาท์พาร์ทิชั่นเสร็จแล้วจะใช้คำสั่ง fsarchiver โดยมี option แรกเป็น restfs ส่วน option สุดท้ายต้องระบุ id ของไฟล์ด้วย เพราะ fsarchiver นั้นเก่งสามารถเขียน image หลายๆพาร์ทิชั่นพร้อมกันแล้วเก็บปลายทางที่ไฟล์ๆเดียวได้ แต่ส่วนใหญ่ผมไม่ได้ใช้ การระบุทำได้โดยใช้ id=0 ดูตัวอย่างด้านล่าง
#fsarchiver restfs /mnt/500ext4/partimages/kubuntu/kubuntu2.fsa id=0,dest=/dev/sda9
- การ restore เร็วกว่าตอนเขียนมากแป๊ปเดียวก็เสร็จ

















































