สมัครสมาชิก   เข้าระบบ  
ประกาศ: UKM 14 ที่ ม.มหาสารคาม เลื่อนเป็นวันที่ 9-10 ม.ค. 2552
พอไหว พอไหว
ธวัชชัย ปิยะวัฒน์
P ธวัชชัย ปิยะวัฒน์
มหาวิทยาลัยสงขลานครินทร์
อีเมลติดต่อ
 
อ่าน: 509
R2A: มันต้องมีวิธีที่ง่ายและเร็วกว่านี้

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

คุณยุ้ยส่งมาให้ผมเป็น Microsoft Word ไฟล์ โดยในไฟล์นั้นมีตารางประกอบด้วยชื่อภาคีและอีเมลติดต่อ ในขณะที่สิ่งที่ผมต้องการเพื่อโปรแกรมของผมคือไฟล์ (text file) ที่มีรายการอีเมลเรียงหนึ่งอีเมลต่อหนึ่งบรรทัดครับ

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

วิธีใช้ "คน" คือให้ นศ. ฝึกงาน copy อีเมลออกมาจากไฟล์ทีละอีเมลจนครบ ในขณะที่ copy ออกมานั้นก็ให้ดูด้วยว่ามีอีเมลซ้ำหรือไม่จะได้ไม่ใส่รายการอีเมลซ้ำในไฟล์

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

วิธีไหนง่ายกว่ากันครับ?

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

ส่วนการใช้เครื่องนั้นในกรณีเช่นนี้กลับทำได้ง่ายกว่า

ผมเปิดไฟล์โดยคลิกใน Gmail ตรง "View as HTML" แล้ว save ไฟล์นั้นลงในเครื่องผม ด้วยวิธีนี้ผมแปลง Word file เป็น HTML file แล้ว

ขั้นต่อไปผมเขียนโปรแกรมเพื่อดึงเฉพาะอีเมลออกมาจาก HTML file นั้น ดังนี้

#! /usr/bin/env perl

%h = ();
while (<>) {
    if (/mailto:([^"]+)/) {
        $email = $1;
        unless ($h{$email}) {
            print lc($email) . "\n";
            $h{$email} = 1;
        }
    }
}

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

#! /usr/bin/env perl
# define a hash for duplication checking
%h = ();
# loop over each line received from STDIN
while (<>) {
# check the line with a regular expression to extract
# an email address from it
if (/mailto:([^"]+)/) {
# save the extracted email to $email
$email = $1;
# if the email is not in the checking hash
unless ($h{$email}) {
# lowercase the email and print to STDOUT
print lc($email) . "\n";
# save the email to the checking hash
$h{$email} = 1;
}
}
}

แล้วเรียกใช้โปรแกรมนี้ในเครื่องคอมพิวเตอร์ผมซึ่งใช้ระบบปฎิบัติการ Ubuntu เช่นนี้

./thf_emails.pl <thf_partners.html > thf_partners.txt

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

นี่คือ "อานุภาพของคอมพิวเตอร์" ครับ

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

หัวใจของผู้เรียนวิทยาการคอมพิวเตอร์หรือวิศวกรรมคอมพิวเตอร์คือ เมื่อพบงาน routines สักอย่างหนึ่ง เขาต้องช่างคิดเพื่อตอบให้ได้ว่า

"มันต้องมีวิธีที่ง่ายกว่านี้และเร็วกว่านี้"

คอมพิวเตอร์ในปัจจุบันมีศักยภาพในการทำให้งานที่ต้องทำซ้ำๆ และไม่ใช้ทักษะความคิด (หรืองาน routines ทั้งหลาย) เป็นงานอัตโนมัติได้หมดแล้ว (เพื่อให้มนุษย์ได้ทำงานที่ใช้ความคิดมากกว่า)

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

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

ผมเชื่อว่างานเขียนโปรแกรมเป็นแขนงหนึ่งของศิลปะ ซึ่งต้องอาศัยเวลาในการฝึกฝนในทักษะเพื่อให้เข้าถึงซึ่ง "ศิลป์" นี้

ผู้เรียนรู้ในการเขียนโปรแกรมคือผู้ฝึกฝนเพื่อให้เกิดศิลป์ในการทำ R2A หรือ Routines to Automation ครับ

งาน routine ทุกงานสามารถแปลงเป็น automation ได้ทั้งสิ้น ผมเชื่อว่าไม่มีข้อแม้ครับ

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

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

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

สร้าง: ส. 16 ส.ค. 2551 @ 19:07   แก้ไข: อา. 17 ส.ค. 2551 @ 12:47   ขนาด: 11503 ไบต์
ความคิดเห็น
P
1. TUKKATUMMO
เมื่อ ส. 16 ส.ค. 2551 @ 21:05
788902 [ลบ]

  • เจริญพรนะโยมธวัชชัย
  • มาอ่านอานุภาพของคอมพิวเตอร์
  • อ่านแล้วทึ่งในความสามารถของโยม
  • อนุโมทนาสาธุ
  • บุญรักษา
P
2. ธวัชชัย ปิยะวัฒน์
เมื่อ ส. 16 ส.ค. 2551 @ 21:12
788912 [ลบ]

กราบเรียนพระอาจารย์ ยินดีที่พระอาจารย์มาเยี่ยมอ่านบันทึกครับ

ไม่มีรูป
3. Rerng®IT
เมื่อ อา. 17 ส.ค. 2551 @ 01:26
789102 [ลบ]

อาจารย์ครับ อ่านมาตลอด นานๆ จะแวะหยุดคุย

เรื่อง programming can be art! นี่ (คำโฆษณาของโปรแกรม pl/sql dev.)

มีไม่กี่คนที่ทำให้ผมเห็นเป็นรูปธรรมชัดเจนขนาดนี้

อ่านแล้วมีความสุขครับ :-)

ไม่แน่ใจว่าสิ้นเดือนจะได้เจอกันใน barcamp2 รึเปล่า

P
4. พญ รวิวรรณ หาญสุทธิเวชกุล
เมื่อ อา. 17 ส.ค. 2551 @ 07:48
789189 [ลบ]

เข้าใจ อานุภาพ ของความรักจริงในงานที่ทำ ความอดทน ใจเย็น และความเอาจริงเอาจัง

นับถือ ในผลงาน 20 ปี ของอาจารย์

มหัศจรรย์ ว่า เออ คอมพิวเตอร์ มันวิเศษ ถ้าใช้มันเป็น

จุดสำคัญ อยู่ตรงนี้แหละค่ะ ว่า แต่ละคนจะอดทนสร้างศิลป สำหรับตนเองขนาดไหน

แต่ของอาจารย์ เป็นระดับเซียน ออกมาเป็นศิลป สำหรับมวลชน แล้วละค่ะ

P
5. ธวัชชัย ปิยะวัฒน์
เมื่อ อา. 17 ส.ค. 2551 @ 12:51
789486 [ลบ]

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

ขอบคุณคุณหมอรวิวรรณ ความสำคัญของการเรียนรู้สร้างงานศิลป์นี่อยู่ที่ความอดทนจริงๆ ครับ พรสวรรค์มีค่าน้อยกว่าพรแสวงครับ

ไม่มีรูป
6. pomdent
เมื่อ อา. 17 ส.ค. 2551 @ 17:29
789779 [ลบ]

  • เห็นด้วยอย่างยิ่งครับ
  • ผมชอบประโยคนนี้จังเลยครับ "ที่ผมเขียนโปรแกรมแก้ไขปัญหานี้ได้ภายในเวลาอันสั้นไม่ได้หมายความว่าผมเก่ง แต่หมายความว่าผมฝึกฝนเขียนโปรแกรมอย่างต่อเนื่องมาตลอด 20 ปีตั้งแต่ผมเริ่มรู้จักคอมพิวเตอร์"
  • มีคนเคยกล่าวว่า อย่าดูที่ความสำเร็จ แต่ให้ดูที่อุปสรรค การฝึกฝน  ประสบการณ์ .....
  • ขอบคุณมากครับ
P
7. ธวัชชัย ปิยะวัฒน์
เมื่อ อา. 17 ส.ค. 2551 @ 23:45
790394 [ลบ]

ขอบคุณครับ ประสบการณ์พิสูจน์จริงๆ ครับ ว่าพรใดๆ ก็ไม่สู้พรแสวงครับ

P
8. นายม้า
เมื่อ ส. 27 ก.ย. 2551 @ 22:39
846102 [ลบ]

อ่านแล้วมีไฟ ต้องรีบไปฝึกฝนเขียนโปรแกรมครับ

ขอบคุณมากครับอาจารย์

P
9. krutoi
เมื่อ อ. 11 พ.ย. 2551 @ 13:51
935417 [ลบ]

-สวัสดีค่ะ อ.P

-ครูต้อยเพิ่งเข้ามาเรียนรู้ได้ 2 เดือนเศษๆ แรกๆเข้ามาอ่านแบบเป็นงงไปหมด เพราะไม่มีความรู้พื้นฐานเรื่องคอมพิวเตอร์ แม้งานพิมพ์ง่ายๆ

ได้พยายามแสวงหา ในg2k ทำให้อาการงง  คงเหลือมึนๆ  ไม่รู้เมือ่ไหร่จะโล่ง คงอีกนานค่ะ

-ชื่นชมอในคะ 10 ปีกับการปั้นคอมให้อยู่ในมืออย่างน่าอัศจรรย์

-นับถือค่ะ

ชื่อ:
อีเมล:
IP แอดเดรส: 38.103.63.56
  เรียกใช้งานตัวจัดการข้อความ
ข้อความ:
 
รหัสสุ่ม: (ใส่รหัสสุ่มที่แสดงไว้ด้านบน)
  ยกเลิก
บันทึกอื่นๆ