ทำไมเวลามันผ่านไปช้านัก…
บันทึกโพสใน จิปาถะ
หายไปพักใหญ่เลย วุ่นมากครับกับงานเอกสารปริญญานิพนธ์ แทบจะเอาไม้บรรทัดมาวัดเลยก็ว่าได้ ล่าสุดวันนี้ก็ส่งแล้วเรียบร้อย (แกะเล่มปริญญานิพนธ์ 1 รอบเพราะปกในตกตัว s ไปตัวนึง)
หลังจากที่ส่งเอกสารต่างๆ เรียบร้อยแล้ว เลยเอาเวลาที่มีมาเผยแพร่เรื่องงานที่ทำซักหน่อย ถือว่าเป็นการกระจายความรู้อีกทางหนึ่ง
บ่นซะเยอะเลย ก่อนอื่นก็ต้องขอขอบคุณผู้มีพระคุณเหล่านี้ก่อน
ขอบคุณอาจารย์เดฟมากๆ ครับ ถ้าไม่มีอาจารย์ผมคงไม่มีวันนี้
ขอบคุณพี่ๆ ในแล็บทุกคนที่ให้คำแนะนำ
ขอบคุณแซนที่ทำโปรเจ็คอย่างแข็งขัน
ขอบคุณพี่องค์ที่คอยนั่งฟังเรื่องไร้สาระ
ขอบคุณปั๊กที่คอยช่วยเหลือเวลามีปัญหา
ขอบคุณพัดที่เป็นเพื่อนที่ดีมาตลอดระยะเวลา 17 ปี
ขอบคุณบุ้งที่ยังแวะเวียนมาหาถึงแม้จะทำงานไปแล้วก็ตาม
ขอบคุณพี่บาสที่คอยตักเตือนอยู่เสมอ
ขอบคุณปอที่คอยดูแลอย่างดีมาตลอด ขอให้งานไปได้สวยนะ
ขอบคุณชุมชนชาว Codenone ที่คอยตอบคำถามเป็นอย่างดีครับ
ขอบคุณหลายๆ คนที่ผมไม่ได้เอ่ยถึงถ้าบุคคลที่ผมไม่ได้เอ่ยถึงเหล่านี้ไม่ได้มาประกอบกันในจังหวะชีวิตของผม ป่านนี้ก็ไม่รู้จะไปอยู่ตรงจุดไหนแล้ว
และคนที่อยากจะขอบคุณมากที่สุดก็คือแม่และพ่อที่ช่วยขัดเกลาผมให้ไม่หลงไปในทางที่ผิด และคอยสั่งสอนในเรื่องต่างๆ ขอบคุณที่ให้ผมได้เรียนในสิ่งที่รัก… ขอบคุณครับ
ปล่อยให้บล็อกเงียบซะนาน เนื่องจากความกลัวว่าจะไม่มีคนเข้ามาอ่าน(ฮา) เลยเอาโจทย์ยอดนิยมมาเผยแพร่ซะหน่อย
โจทย์ที่ว่าก็คือการหาจำนวนเฉพาะ (จำนวนที่มีแค่ 1 กับตัวมันเองหารลงตัว) โดยจะหาจำนวนเฉพาะจนถึงจำนวนที่กำหนด (หาจำนวนเฉพาะถึง 100 แล้วกัน)
not_prime = [j for i in range(2,10) for j in range(i*2,100,i)]
prime = [x for x in range(2,100) if x not in not_prime]
print prime
จบแล้วครับ เทคนิคที่ผมใช้นี้ก็มีชื่อเรียกเท่ๆ ว่า List Comprehension ซึ่งเป็นความสามารถที่มีประโยชน์มากใน python ทำให้โค้ดของเราสั้นขึ้นเยอะเลย
ส่วนวิธีการของอัลกอริทึ่มนี้ก็ง่ายๆ ครับ คือเราจะทำการสร้างลิสต์ของเลขที่ไม่เป็นจำนวนเฉพาะก่อนโดยการจับสมาชิกที่ 2 , 3 , 4 , … ,10 หารลงตัวมาเก็บไว้ในลิสต์
จากนั้นเราก็สามารถหาจำนวนเฉพาะได้จากการไล่เช็คเลขไปเรื่อยๆ จาก 2 ถึง 100 ว่าถ้ามีเลขที่ไม่อยู่ในลิสต์ของจำนวนที่ไม่เป็นจำนวนเฉพาะ ก็จะเก็บเลขนั้นลงในลิสต์
Tip: จำนวนมากสุดที่สามารถนำมาหารเพื่อหาเลขที่หารลงตัวนั้นจะมีค่าไม่เกินรากที่สองของจำนวนที่กำหนดไว้ อย่างเช่น
ถ้าผมต้องการหาจำนวนเฉพาะตั้งแต่ 2 ถึง 30 เลขที่จะนำมาหารก็จะมีตั้งแต่ 2 ไปจนถึง 6 เพราะ 6^2 ก็เกินค่า 30 แล้ว ซึ่งก็หมายความว่าจะนำค่าที่มากกว่า 6 มาหารก็ไม่มีประโยชน์ (7 ก็เป็นจำนวนเฉพาะ ส่วน 8 ก็มี 4 หารลงตัวอยู่แล้ว หรือจะเป็น 9 ซึ่ง 3 ก็หารลงตัวอยู่แล้ว)
จากข้อสังเกตุนี้ทำให้รอบการทำงานของเราลดไปเยอะกว่าวิธีตรงๆ มาก เลยเป็นที่มาของการตั้ง for อันแรกของโปรแกรมนี้ที่วนลูปตั้งแต่ค่า 2 จนถึง 10
นั่งงงกับเครื่องโน๊ตบุคตัวเองมาตั้งนานว่าทำไมถึงอัพเดตไม่ได้ (แต่เครื่องอื่นใช้ได้ตามปกติ - -”) พออัพเดตก็จะมี Error Message ขึ้นมาว่า
E: Could not get lock /var/lib/apt/lists/lock - open (11 Resource temporarily unavailable)
E: Unable to lock the list directory
ก็เพิ่งจะมารู้นี่แหละว่าสาเหตุมันเป็นเพราะว่า apt-get มันค้างนั่นเอง เราสามารถเช็คการทำงานของโปรเซส apt ได้ง่ายๆ โดยใส่คำสั่งนี้ใน terminal
ps -e | grep apt
จากนั้นเราก็จะเห็น ID ของโปรเซส (ตัวเลขด้านซ้ายสุด) ก็ให้เราปิดการทำงานของโปรเซสซะ ด้วยคำสั่ง
sudo kill “ID ของโปรเซสที่ต้องการปิด”
แล้วก็ลองเรียก Synaptic มาทำงานใหม่น่าจะสามารถใช้งานได้ตามปกติ
.
.
.
.
ปล. สำหรับมือใหม่ๆ อาจจะงงกับรูปแบบคำสั่งอยู่บ้าง ก็จะขออธิบายไว้ตรงนี้เลยแล้วกันครับ
คำสั่ง ps ย่อมาจากคำว่า process ใช้แสดงรายการของโปรเซสที่ทำงานอยู่
ส่วน -e เป็นออพชั่น ซึ่งมีความหมายว่า “ทั้งหมด” (ถ้าอยากดูเพิ่มเติมว่ามีออพชั่นอะไรให้ใช้บ้างก็พิมพ์คำสั่ง man ps ใน terminal ดู จะมีวิธีใช้อย่างละเอียดให้อ่าน)
ส่วนคำสั่ง grep จะไว้ใช้ร่วมกับคำสั่งอื่นๆ ในการเสิร์ชหาชื่อของไฟล์ต่างๆ ในระบบ ยกตัวอย่างเช่น
ผมต้องการดูรายชื่อไฟล์ที่มีคำว่า tmp ในโฟลเดอร์หนึ่งด้วยคำสั่ง ls ทีนี้ผลลัพธ์ที่เห็นก็คือรายการที่แสดงออกมายาวเป็นหางว่าว ผมก็ต้องนั่งไล่ดูไปตามตัวอักษรทำให้เสียเวลามาก ดังนั้นผมจะใช้คำสั่ง grep มาช่วยในการค้นหาร่วมกับคำสั่ง ls โดย
ls | grep tmp
ผลลัพธ์คือรายการที่แสดงจะเหลือแค่ไฟล์ที่มีคำว่า tmp เป็นส่วนประกอบของชื่อไฟล์ ทำให้เราสามารถค้นหาไฟล์ต่างๆ ใน terminal ได้รวดเร็วขึ้น
ช่วงนี้วันๆ ดูมันค่อยๆ ผ่านไปซะเหลือเกิน มานั่งคิดย้อนกลับไปมีซักกี่วันกันที่เราไม่ได้เล่นอินเตอร์เน็ต ปีที่ผ่านมา… ไม่มีเลยซักวันเดียว!
นี่เราขาดมันไม่ได้ถึงขนาดนี้เลยหรือ?
อย่างโทรศัพท์มือถือก็เหมือนกัน ถ้าปิดโทรศัพท์ซักวันนึงก็ไม่ค่อยสบายใจเท่าไหร่แล้ว เมื่อก่อนคนเราไม่มีอุปกรณ์พวกนี้ก็สามารถอยู่ได้โดยไม่รู้สึกว่ามีอะไรขาดหายไป ที่ปัจจุบันนี้เป็นแบบนั้นก็เพราะมันเป็นส่วนหนึ่งในชีวิตของเราไปแล้วนั่นเอง คิดว่าทุกคนถ้าเคยมีิสิ่งที่เป็นส่วนหนึ่งในชีวิตแล้วสิ่งนั้นหายไปก็คงรู้สึกแปลกไปเช่นเดียวกัน
ดังนั้นเลยเป็นที่มาของการตัดสินใจออฟไลน์ให้ชีวิตตัวเองบ้างแล้วไปทำอย่างอื่นดู มันก็สบายใจไปอีกแบบนะที่ว่าชีวิตเราไม่ได้ถูกผูดมัดอยู่กับอะไรเป็นอะไรที่อิสระสุดๆ (คนที่จะทำแบบนี้ได้ต้องพร้อมที่จะตัดและรู้ถึงปัญหาที่จะตามมานะ ถึงจะสบายใจในสิ่งที่จะทำ)
แต่ถึงอย่างนั้นผมก็คิดว่าผมคงไม่สามารถทำมันได้นานนักหรอก
บันทึกโพสใน จิปาถะ