วันศุกร์ที่ 26 ธันวาคม พ.ศ. 2551

Acer Aspire One: การใช้งาน Linpus Linux Lite (Fedora 8) และเพิ่มความสามารถให้ไม่แพ้(หรือดีกว่า) Windows XP

เนื่องจากว่าผมมีโอกาสได้ทดลองใช้งาน ลินปุสลินุกซ์ไลท์ (Linpus Linux Lite) ที่มาพร้อมกับ Acer Aspire One มาระยะหนึ่ง (ประมาณเกือบสัปดาห์) รู้สึกว่าใช้งานได้ดีมาก เปรียบเทียบกับก่อนหน้านั้นที่เคยใช้ (ของคนอื่น) ซึ่งเป็นเวอร์ชันที่ลง วินโดวส์เอ็กซ์พี (Windows XP) แรู้สึกว่าไม่ค่อยประทับใจเพราะว่ามันช้ามาก ๆ (เมื่อเทียบกับพีซี หรือโน๊ตบุ๊คปกติ)
และเมื่อสัปดาห์ที่แล้วผมก็มีโอกาสได้มาครอบครองซะคราวนี้จึงได้เล่นอย่างจริงจังซะที ด้วยพอมีความรู้พื้นฐาน เกี่ยวกับคอมพิวเตอร์อยู่บ้าง ผมจึงจับมันมาลงลีนุกซ์ซะเลย ซึ่งพอลงแล้วรู้สึกได้เลยว่าความเร็วเพิ่มขึ้นอีกเยอะ(โดยเฉพาะตอนบู๊ตให้พร้อมใช้งาน ใช้เวลาไม่ถึง ๑๐ วินาที) การใช้งานเบราเซอร์ Firefox ก็รวดเร็วทันใจ ไม่มีหน่วงเวลาเมื่อใช้แท็บมาก ๆ (ปกติผมใช้งานแต่ละครั้งจะเปิดแท็ปไว้ประมาณ ๒๐ แท็บ) แต่ก็มีหลายอย่าง ที่รู้สึกอึดอัดเพราะว่าผมปรับแต่งอะไรมันไม่ได้เลย
ดังนั้นผมจึงได้พยายามศึกษาข้อมูลที่จะปรับแต่งให้เจ้า Aspire One ตัวน้อยของผมใช้งานได้ดีขึ้น ไม่แพ้เครื่องใหญ่ ๆ ซึ่งคิดไปแล้วถ้ายังใช้ Windows XP นี่ยังไงเรื่องความเร็วก็สู้เขาไม่ได้ เพราะรุ่นที่ผมมีมันเป็นรุ่น A110 เป็นรุ่นที่เล็กสุด (แรม 512 แล้วก็ SSHD แค่ 8GB เอง -_-") ก็เลยต้องจัดการกับเจ้าลีนุกซ์นี่แหละครับ เป้าหมายหลักของผมคือ "ผมเคยใช้วินโดวส์ทำอะไรได้ ลีนุกซ์ของผมก็ต้องทำได้เหมือนกัน"
หลังจากที่ได้เล่นและค้นหาข้อมูลได้ลองผิดลองถูกอะไรมาหลายอย่าง (จนต้องลงใหม่ไปรอบนึง) ก็เลยอยากแบ่งปัน และแลกเปลี่ยนความรู้กับคนอื่น ๆ ครับ มาดูรูปกันก่อน...


สภาพภายนอกยังดูดี (หรือเปล่า)


บลูทูธยูเอสบี (ซื้อมาจากพันธ์ทิพย์ครับ)


หน้าจอปกติของผม ลงโปรแกรมไปเยอะเหมือนกัน



ภาษาจีนก็ลงได้ครับ (เอาไว้แชตกับสาว ^_^)


กำลังต่อโมเด็มมือถือโนเกียครับ


ส่วนที่ผมได้ปรับแต่งไปแล้วมีดังต่อไปนี้ครับ

  1. เพิ่มแอดวานซ์เมนูเวลาคลิกขวาที่หน้าเดสก์ท๊อป (อันนี้ไม่ยุ่งยากเท่าไหร่)
  2. เพิ่มภาษาไทย หรือภาษาอื่น ๆ (ไปดาวน์โหลดมาจากเว็บของเอเซอร์ หรือว่าเรียก Live Update เอา)
  3. ลงโปรแกรมต่าง ๆ เช่น Skype (โปรแกรมวีดีโอแช็ต) Picasa (โปรแกรมจัดการรูปภาพ ผมว่ามันดีกว่าตัวที่แถมมานะครับ) VLC (โปรแกรมดูหนัง ดูได้หลายฟอร์แมตครับ) และอื่น ๆ อีกมากมาย ตามความโลภ ๕๕ เพราะโปรแกรมของลีนุกซ์ที่ผมใช้ทั้งหมดเป็นฟรีแวร์ (อันนี้บางตัวก็ลงยาก บางตัวก็ง่าย แต่ต้องเขียนคอมมานด์ในเทอร์มินอลด้วยนะครับ)
  4. เพิ่มเติมไอคอนโปรแกรมที่ผมพึ่งลงใหม่ได้
  5. เซ็ตอัพ USB Modem กับโทรศัพท์ Nokia E61 ของผม ให้สามารถใช้งานอินเตอร์เน็ตได้ทุกที่ (อันนี้ก็ยากขึ้นมาอีกหน่อย)
  6. เซ็ตอัพ Bluetooth USB หลังจากที่ลิงค์โทรศัพท์ผ่าน USB ได้แล้วยังไม่พอใจ (ไม่อยากพกสายลิงค์ไปไหนมาไหนด้วย) ก็เลยไปหา USB Bluetooth Dongle ตัวเล็ก ๆ ราคาร้อยกว่าบาท ซื้อที่พันธ์ทิพย์ แล้วก็มาเซ็ตอัพ (อันนี้ยาก เพราะถึงกับต้องคอมไพล์เคอร์เนลใหม่)
  7. อื่น ๆ .... (อ่านได้จาก http://www.linpusone.com)
รายละเอียดที่ผมได้ปรับแต่งไปแล้วในแต่ละข้อจะสรุปแล้วมาเขียนให้เป็นข้อ ๆ ใน LinpusOne นะครับ

RSK


วันพุธที่ 27 สิงหาคม พ.ศ. 2551

อูบุนตู: การรวมไฟล์ PDF โดยไม่ต้องพึ่ง Adobe Acrobat

เราสามารถใช้ Ghostscript ช่วยได้ดังตัวอย่าง

$ gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=output.pdf -dBATCH 1.pdf 2.pdf 3.pdf

ไฟล์ 1.pdf, 2.pdf, 3.pdf ก็คือไฟล์ที่จะนำมารวม
ไฟล์ output.pdf คือผลลัพธ์ของการรวม

วันพฤหัสบดีที่ 21 สิงหาคม พ.ศ. 2551

Ubuntu Linux: รายชื่อดิสก์ที่สามารถเมาท์ได้

ในบางครั้งเราอาจจะเจอปัญหาไม่สามารถเมาท์อุปกรณ์โดยอัตโนมัติได้ เราจึงต้องใช้วิธีการเมาท์ด้วยตนเอง แต่ว่าเราจะต้องรู้ก่อนว่าเราจะเมาท์อุปกรณ์อะไร แล้วก็เป็นไฟล์ฟอร์แมตชนิดไหน ให้ เราใช้คำสั่ง sudo fdisk -l ก็จะได้ลิสต์ของอุปกรณ์ก่อนที่จะทำการเมาท์
Disk /dev/sdb: 400.0 GB, 400088456704 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x8445b8d2

Device Boot Start End Blocks Id System
/dev/sdb1 1 12748 102398278+ 7 HPFS/NTFS
/dev/sdb2 12749 28046 122881185 7 HPFS/NTFS
/dev/sdb3 28047 48641 165429337+ 7 HPFS/NTFS

$ mount /dev/sdb1 /media/sdb1

วันพฤหัสบดีที่ 14 สิงหาคม พ.ศ. 2551

Java Programming: For-each Loop

For-each Loop

วัตถุประสงค์

ลูป for ได้รับการเพิ่มขีดความสามารถมาตั้งแต่จาวา ๕ ทำให้การวนรอบของอารเรย์ และคอลเลคชั่นชนิดอื่น ๆ ทำได้สะดวกสบายขึ้นอีก สำหรับ for ลักษณะใหม่นี้เราเรียกว่า enhanced for หรือ for-each (ในภาษา python และภาษาตัวใหม่ ๆ ก็มีเหมือนกันและมันก็ถูกเรียกว่า for each) หรือบางทีถูกเรียกว่าลูป for-in

รูปแบบมาตรฐาน

ตารางข้างล่างเป็นตัวอย่างการใช้งานในรูปแบบของอารเรย์ และ iterator ซึ่งทั้งสองกรณีจะต้องมีตัวแปรเพิ่มอีกหนึ่งตัวใช้แทน index ของลูป for ชนิดเดิม

For-each loopEquivalent for loop
for (type var : arr) {
body-of-loop
}
for (int i = 0; i < arr.length; i++) {
type var = arr[i];
body-of-loop
}
for (type var : coll) {
body-of-loop
}
for (Iterator<type> iter = coll.iterator(); iter.hasNext(); ) {
type var = iter.next();
body-of-loop
}

ตัวอย่าง การรวมค่าทั้งหมดในอารเรย์

นี่คือตัวอย่างลูปทั้งชนิด for-each และ for ลูปปกติ

double[] ar = {1.2, 3.0, 0.8};
int sum = 0;
for (double d : ar) { // d gets successively each value in ar.
sum += d;
}
double[] ar = {1.2, 3.0, 0.8};
int sum = 0;
for (int i = 0; i <> 3; i++) {
sum += ar[i];
}

ที่มา http://www.leepoint.net/notes-java/flow/loops/foreach.html

วันพุธที่ 13 สิงหาคม พ.ศ. 2551

Java Programming: ความแตกต่างของการเขียนโปรแกรมเชิงโครงสร้าง และโปรแกรมเชิงวัตถุ (2)



ถ้าเปรียบเทียบการเขียนโปรแกรมเชิงโครงสร้างกับการเขียนโปรแกรมเชิงวัตถุนั้น ในการแก้ปัญหาเดียวกันจะมองกันคนละอย่างกัน เช่น ถ้าจะเขียนโปรแกรมสำหรับหาค่าเกรดเฉลี่ยของนักศึกษาคนหนึ่ง สำหรับการเขียนโปรแกรมเชิงโครงสร้างนั้นก็จะพยายามคิดหาตัวแปรที่จะมาใช้เพื่อเก็บข้อมูล เช่น ตัวแปรสตริงให้เก็บชื่อนักศึกษา และวิชาเรียน ตัวแปรจำนวนเต็มใช้เก็บเกรดแต่ละวิชาที่เรียน ตัวแปรดับเบิ้ลให้เก็บค่าของผลลัพธ์เกรดเฉลี่ย เป็นต้น จากนั้นก็หาฟังก์ชันเพื่อที่จะนำตัวแปรเหล่านั้นมาประมวลผลให้ได้ผลลัพธ์ตามต้องการ แต่สำหรับการเขียนโปรแกรมเชิงวัตถุนั้นจะคิดถึงตัวตนของวัตถุก่อน เช่น นักศึกษา วิชาเรียนแต่ละวิชา จากนั้นก็สร้างคลาส(Class)จากการวิเคราะห์และกำหนดคุณลักษณะ(Attribute) และพฤติกรรม(Behavior)ของวัตถุนั้น ๆ เมื่อครบถ้วนแล้วจึงสร้างวัตถุที่เกี่ยวข้องและเรียกใช้งานเมธอดเพื่อให้ทำงานเสร็จสิ้นตามจุดประสงค์

วันอังคารที่ 12 สิงหาคม พ.ศ. 2551

Java Programming: ความแตกต่างของการเขียนโปรแกรมเชิงโครงสร้าง และโปรแกรมเชิงวัตถุ


การเขียนโปรแกรมเชิงโครงสร้าง (Structured Programming) นั้นจะแยกส่วนของข้อมูลจากฟังก์ชันอย่างชัดเจน ซึ่งการแยกข้อมูลจากฟังก์ชันนั้นมักจะมีผลให้เกิดความสับสน และค่อนข้างยากในการปรับปรุงแก้ไขโดยเฉพาะกับโปรแกรมขนาดใหญ่

การเขียนโปรแกรมเชิงวัตถุ (Object Oriented Programming) จะเขียนโปรแกรมโดยอ้างอิงโมเดลวัตถุในโลกที่มีอยู่จริงในการแก้ปัญหา เช่น รถยนต์ บัญชีธนาคาร หรือสุนัข แปลงให้อยู่ในรูปแบบโค๊ดภาษา ซึ่งบางส่วนอาจจะไม่ถูกเรียกใช้งานก็ได้

การเขียนโปรแกรมเชิงโครงสร้างเน้นการแปลงสิ่งที่มีอยู่จริงให้อยู่ในกฏเกณฑ์ของโปรแกรมภาษา แต่การเขียนโปรแกรมเชิงวัตถุนั้นเน้นการแปลงให้โปรแกรมภาษาอยู่ในรูปแบบของสิ่งที่มีอยู่จริง

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

การเขียนโปรแกรมเชิงวัตถุจะมองรถยนต์คือการรวมกันของกลุ่มพฤติกรรม (behaviors) และสถานะต่าง ๆ ของรถคันนั้น (values of data) การรวมตัวระหว่างตัวแปรสถานะ และพฤติกรรมจะได้ผลลัพธ์เป็นวัตถุ (object) เราสามารถสร้างวัตถุได้ง่าย ๆ เหมือนกับที่เราสร้างตัวแปรทั่วไป ในโปรแกรมเชิงวัตถุนั้นจะระบุวัตถุที่จะใช้และเรียกใช้งานฟังก์ชันของมันในเวลาใด ๆ ก็ได้

วันอาทิตย์ที่ 10 สิงหาคม พ.ศ. 2551

Java: จาวาส่งผ่านอาร์กิวเมนต์ด้วยวิธีการคัดลอกค่าเท่านั้น

สำหรับคนที่คุ้นเคยกับภาษา C++ คงจะรู้จักความแตกต่างของ Passed by Reference กับ Passed by Value ในการส่งค่าผ่านอาร์กิวเมนต์ และพารามิเตอร์ของฟังก์ชัน ตัวอย่างง่าย ๆ ที่เรารู้จักคือฟังก์ชัน swap:

โค๊ดโปรแกรม:

public class SwapExample {


public static void main(String[] args) {
Integer num1 = 10;
Integer num2 = 20;
System.out.println("before swap: "+num1+","+num2);
swap(num1, num2);
System.out.println("after swap: "+num1+","+num2);

}

public static void swap(Integer a, Integer b)
{
Integer temp = a;
a = b;
b = temp;
System.out.println("inside swap: "+a+","+b);
}

}

ผลลัพธ์คือ:

before swap: 10,20
inside swap: 20,10
after swap: 10,20


ONLY PASSED BY VALUE !!!!