Posted by: thitipat | มีนาคม 14, 2008

4:46 AM

ทำไมเวลามันผ่านไปช้านัก…

Posted by: thitipat | มีนาคม 13, 2008

CityGen (Real-Time City Generator)

หายไปพักใหญ่เลย วุ่นมากครับกับงานเอกสารปริญญานิพนธ์ แทบจะเอาไม้บรรทัดมาวัดเลยก็ว่าได้ ล่าสุดวันนี้ก็ส่งแล้วเรียบร้อย (แกะเล่มปริญญานิพนธ์ 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

Posted by: thitipat | กุมภาพันธ์ 7, 2008

Help me, I can’t update my Ubuntu

นั่งงงกับเครื่องโน๊ตบุคตัวเองมาตั้งนานว่าทำไมถึงอัพเดตไม่ได้ (แต่เครื่องอื่นใช้ได้ตามปกติ - -”) พออัพเดตก็จะมี 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 ได้รวดเร็วขึ้น

Posted by: thitipat | กุมภาพันธ์ 2, 2008

ออฟไลน์ให้ชีวิต

ช่วงนี้วันๆ ดูมันค่อยๆ ผ่านไปซะเหลือเกิน มานั่งคิดย้อนกลับไปมีซักกี่วันกันที่เราไม่ได้เล่นอินเตอร์เน็ต ปีที่ผ่านมา… ไม่มีเลยซักวันเดียว!

นี่เราขาดมันไม่ได้ถึงขนาดนี้เลยหรือ?

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

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

แต่ถึงอย่างนั้นผมก็คิดว่าผมคงไม่สามารถทำมันได้นานนักหรอก

« Newer Posts - Older Posts »

หมวดหมู่