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

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

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

ซึ่งตัวอย่างงานที่ทำคือการแก้ไขคำที่คนอาจพิมพ์ผิดบ่อย หรือหลักการทับศัพท์ หรืปัจจุบันรวมถึงกรณีสระซ้อน ซึ่งปัจจุบันคำที่บอตคุงตรวจนั้นมีมากกว่า 80 รายการ ตัวอย่าง:

คำที่ตรวจสอบ คำที่แทนที่
คริสตศตวรรษ คริสต์ศตวรรษ
คริสตศักราช คริสต์ศักราช
คริสตศาสนา คริสต์ศาสนา
คริสต์กาล คริสตกาล
คริสต์เตียน คริสเตียน
คริสมาส คริสมาสต์ คริสต์มาส

 

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

คำที่ตรวจสอบ คำที่แทนที่
อัพเด็ต, อัพเดต, อัพเดท, อัปเด็ต อัปเดต
อัพโหลด อัปโหลด
อินเตอเน็ต, อินเตอร์เน็ต, อินเตอร์เนต อินเทอร์เน็ต
ลิ้งค์ ลิ๊งค์ ลิ้งก์ ลิ๊งก์ ลิงก์

 

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

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

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

ขอยกข้อความส่วนหนึ่งของบทความไร้สาระนุกรมบนวิกิพีเดียไทย:

เนื้อหาส่วนใหญ่ในไร้สาระนุกรม มีลักษณะเป็นเรื่องแต่งขึ้น เรื่องล้อเลียน และเรื่องขำขัน ตัวอย่างของข้อความที่ปรากฏในเว็บไร้สาระนุกรม ในหน้าบทความประเทศไทย เช่น

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

วิเกรียนพีเดียคือที่ๆคุณสามารถแสดงความเป็นเกรียนมีการศึกษาได้อย่างภาคภูมิ

 

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

อย่างบทความที่ผมชอบปัจจุบันก็มี:

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

SQL: สุดยอด SELECT statement

posted on 23 Mar 2008 17:30 by icedtea  in Programming

จะบอกว่าหลังจากโพสเรื่อง "งงๆ" ไปแล้ว 2 เรื่องก็กะว่าจะเปลี่ยนไปโพสเรื่องอื่นๆบ้าง แต่นี่เพิ่งเจอพอดี เลยอดไม่ได้ ไหนๆ ก็ 2 เรื่องไปแล้ว ก็ขออีกโพสก่อนละกัน

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

ไปดู query ดังกล่าวกันเอาเองนะครับที่นี่เลย ต้องเรียกว่าสุดยอดจริงๆ

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

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

SQL: If EXISTS Then UPDATE Else INSERT

posted on 21 Mar 2008 10:12 by icedtea  in Programming

ในหลายกรณีที่คุณอาจจะต้องเขียน Stored Procedure เพื่อทำหน้าที่ง่ายๆ อย่างตรวจสอบว่ามี record นี้หรือยัง หากมีแล้วให้ทำการ UPDATE หากยังไม่มีให้ทำการ INSERT อย่างกรณีที่ใช้กันไม่ว่าจะสำหรับอัปเดต/เพิ่มสินค้า หรือสถิติก็ตาม

โดยปกติแล้ว ผมเองก็จะเขียนใช้ IF statement อะไรแบบนี้

IF EXISTS (SELECT * FROM Table1 WHERE Column1='something')

    UPDATE Table1 SET (something = something) WHERE Column1='something'

ELSE

    INSERT INTO Table1 VALUES (something, something)

 

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

ซึ่งเข้าใจก่อนว่าวิธีเดิมนั้น SQL ต้องเสียเวลาไปค้นหาเพื่อตรวจสอบว่ามี record อยู่หรือเปล่า แต่ถ้าใช้วิธีใหม่แบบนี้:

UPDATE Table1 SET (something = something) WHERE Column1='something'

IF @@ROWCOUNT=0

    INSERT INTO Table1 VALUES (something, something)

 

จะพบว่า SQL ไม่ต้องเสียเวลาค้นหาเลย โดยจะพยายามอัปเดตทันที จากนั้นตรวจสอบว่าอัปเดตได้หรือไม่ด้วยเพียงตรวจค่า ROWCOUNT ไม่ต้องค้นหา จากนั้นหากไม่ได้อัปเดต จึงค่อย INSERT พอผมอ่านจบ บอกว่าค่อนข้างประทับใจเลย เวลารู้สึกได้รู้วิธีอะไรใหม่ๆ ดีกว่าเดิม

ป.ล. ผมเคยมีประสบการณ์จริงที่เคยเขียนแล้วใช้งานจริง โดยเขียนใช้วิธีแรก แต่แล้วคำสั่งอัปเดตผิดพลาดอย่างเป็น .... WHERE DepartmentCode = DepartmentCode แทนที่จะเป็น DepartmentCode = @DepartmentCode เพียงโค้ดผิดเล็กน้อย ทำให้คำสั่งไปอัปเดตซ้ำกัน โดยหลายกรณีควร INSERT ใหม่ พอเห็นแล้วรู้สึกได้โง่เลย จากนั้นต้องมานั่งแก้ไม่ใช่แค่โค้ด แต่รันคำนวณประมวลข้อมูลใหม่อีกด้วย เหอะๆ

IE8 กับ VS2008 มีอะไรกัน..

posted on 17 Mar 2008 10:54 by icedtea  in Software-Development

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

วันก่อนผมอ่านเจอบล็อกหนึ่งพูดถึงความสามารถที่ไม่ได้มีพูดถึงที่อื่น ซึ่งฟังแล้วเล็กน้อยมาก แต่อย่างน้อยลดการบ่นจากผมได้ข้อหนึ่ง นั้นคือเวลาที่พัฒนาเว็บแอปพลิเคชันบน Visual Studio แล้วต้องดีบักจาวาสคริปต์นั้น ต้องปิดตัวเลือก "Disable script debugging" เพื่อที่จะสามารถดีบักจาวาสคริปต์ได้ แต่เมื่อปิดตัวเลือกนี้แล้ว จะพบกับกล่อง dialog แจ้งข้อผิดพลาดสคริปต์เวลาเราเข้าเว็บอื่นๆที่มีข้อผิดพลาดของสคริปต์ ซึ่งทำให้รำคาญ แต่จะปิดก็ไม่ได้ เพราะเดี๋ยวเวลาพัฒนา ก็ต้องเสียเวลามานั่งเปิดอีก จึงทำให้เป็นสิ่งรำคาญที่ต้องทนไป (หรือบางคนก็จะต้องทนปิดทนเปิดแทน)

ตั้งแต่ครึ่งปีที่แล้ว Visual Studio 2008 แอบรู้ก่อนว่าไออี 8 จะมีการปรับปรุงระบบแทบด์ใหม่ จึงได้เพิ่มความสามารถล่วงหน้าไว้โดยจะบอกไออี 8 ให้เปิด script debugging เฉพาะ tab ที่รันแอปพลิเคชันของเราเท่านั้น ซึ่งทำให้ต่อไป ผมจะได้สามารถเปิดตัวเลือกให้ disable script debugging แต่ยังสามารถดีบักสคริปต์ของแอปพลิเคชันได้เหมือนเดิม

นี่แหละ ความสามารถเล็กๆน้อยๆ เชื่อหรือไม่ว่า เป็นต้นเหตุกับความหงุดหงิด ซึ่งจะช่วยได้เยอะเลยทีเดียว

 

ป.ล.โพสนี้เจาะกลุ่มเป้าหมายเฉพาะสำหรับผู้พัฒนาเว็บแอปพลิเคชันบน Visual Studio ผู้ใช้ไออีทั่วไปอ่านแล้วอาจจะงงเล็กน้อย หรือบานกลาง และอาจสรุปว่าไม่เห็นเกี่ยวอะไรเล้ย เสียเวลา