ผู้สนับสนุน

วันอาทิตย์ที่ ๑๓ เมษายน พ.ศ. ๒๕๕๑

'''
Dinning Philosopher Symmetric
Moss Rookie
ไม่ควรใช้โปรแกรมนี้ในการอ้างอิงในทางวิชาการใดๆ ทั้งสิ้น
เป็นโปรแกรมที่เขียนขึ้นมาเอง ไม่มีการทำความสะอาด source code ทั้งสิ้น

ทำเพื่อเป็นตัวอย่างในการเขียน Thread ใน python แบบง่ายๆ rookie ๆ
และเำพื่อให้เข้าใจปัญหา
Dinning Philosopher ในวิชา OS(ที่เขียนมานี้เป็นในแบบที่ผมเข้าใจ)

โปรแกรมนี้ทำงานโดยจะมีการสร้าง Tread ขึ้นมาตามจำนวนของ
Philosopher
และมีจำนวนของ chopstick เท่ากับจำนวนของ
Philosopher
chopstick เป็นตัวแปลกลางที่ทุก Tread สามารถเข้าถึงได้
โดยมีกฏว่า
1 เมื่อ
Philosopher มี chopstick 2 อันเท่านั้นถึงจะมีโอกาสได้กินอาหาร
2 Philosopher จะสามารถหยิบ
chopstick ได้แค่ที่วางอยู่ข้างตัวเองเท่านั้น
3 มีโอกาสกินอาหารได้แค่ 1 ครั้งเท่านั้นต่อการได้ chopstick ครบคู่(ห้ามถือครอง)
4 ไม่มีใครมีสิทธิ์มากกว่ากัน คือห้ามหยิบ chopstick ที่คนอื่นถือครองอยู่
5 ทุกคนต้องมีโอกาสได้กินอาหาร หรือไม่มีใครรอไปตลอดกาล

การทำงานของโปรแกรม
1 รันด้วย python dinning.py
2 เลือกจำนวนของ
Philosopher
3 ดูผลการทำงาน
4 กด Ctrl+C เพื่อให้ร้านปิดแล้วให้ Philosopher รีบกินให้เสร็จ(ให้ Tread แต่ล่ะตัวจบการทำงาน ก่อนออกจาก program)
'''
import thread
import threading
import random
import time
import signal
#Magic number
#PRINT = 1 Mean print all action
#ON_THE_TABLE = 0 Mean chopsticks is on the table
#Function handler

def handler(signum,frame):

global restaurantOpen
print "Restuarant close"
restaurantOpen = False
def setOutput():
act = 0
while act<1 or act> 2:
try:
act = int(raw_input("All action(1),Eating Only(2)"))
except ValueError:
print "Input must be integer."
if act<1 or act> 2:
print "Enter value 1 xor 2"
return act
def setNumberOfThread():
buf = 11
while buf < 2 or buf> 10:
try:
buf = int(raw_input("How many number of chopstick?"))
except ValueError:
print "Input must be integer."
if buf > 10:
print "Is it to much?"
elif buf < 2:
print "Why? Don't hungry."
return buf
class Philosopher(threading.Thread):
def __init__(self,tno):
threading.Thread.__init__(self)
self.kount = 0
self.tno = tno
# Function to Check "Is dead-lock occur?"
def isdeadlock(self,lis):
flag = True
for i in range(len(lis)):
if lis[i] == ON_THE_TABLE:
return False
if lis[i] == lis[(i+1)%numberOfThread]:
flag = False
return flag
# Philosopher use this function when he hungry
def hungry(self):
# get chopstick to change value
global chopstick
# race: "Who got first chopstick
time.sleep(random.randint(1,5))
# wait forever if can not get 2 chopstick or when deadlock occur
while 1:
#Pick left
if chopstick[self.tno%numberOfThread]==ON_THE_TABLE:
# Show what is it work
if action == PRINT:
print self.tno,"Pick left"
chopstick[self.tno%numberOfThread]=self.tno
# Get left chopstick may cause dead-lock
if self.isdeadlock(chopstick):
print chopstick
if action == PRINT:
print self.tno,"Drop left"
# Than put it down
chopstick[self.tno%numberOfThread]=ON_THE_TABLE
# wait for next time
time.sleep(random.randint(1,5))
# if it has left chopstick now try to pick right chopstick
while chopstick[self.tno%numberOfThread]==self.tno and
chopstick[(self.tno+1)%numberOfThread]==ON_THE_TABLE:
# Note. pick right chopstick does not cause dead-lock because it's right turn
if action == PRINT:
print self.tno,"Pick right"
chopstick[(self.tno+1)%numberOfThread]=self.tno
time.sleep(random.randint(1,3))
# Ready to eat anything
if chopstick[self.tno%numberOfThread]==self.tno and chopstick[(self.tno+1)%numberOfThread]==self.tno:break
def eating(self):
print self.tno,"Eating"
if action == PRINT:
print chopstick
time.sleep(random.randint(1,2))
def think(self):
if action == PRINT:
print self.tno,"Thinking"
time.sleep(random.randint(1,2))
def drop(self):
global chopstick
if action == PRINT:
print self.tno,"Drop right"
chopstick[(self.tno+1)%numberOfThread]=ON_THE_TABLE
time.sleep(random.randint(1,2))
if action == PRINT:
print self.tno,"Drop left"
chopstick[self.tno%numberOfThread]=ON_THE_TABLE
time.sleep(random.randint(1,2))
def run(self):
global chopstick
kount = 0
while restaurantOpen:
self.hungry()
self.eating()
kount +=1
self.drop()
self.think()
print self.tno,"I have already eaten for",kount,"times"


#define my Magic number
PRINT = 1 #Mean print all action
ON_THE_TABLE = 0 #Mean chopsticks is on the table
restaurantOpen = True
signal.signal(signal.SIGINT, handler)
action = PRINT
numberOfThread = setNumberOfThread()
chopstick = []
philosopher = []

for i in range(numberOfThread):
chopstick.append(ON_THE_TABLE)

print chopstick
print "Start call Tread"
for i in range(1,numberOfThread+1):
philosopher.append(Philosopher(i))
#run
for thrd in philosopher:
thrd.start()
#wait
while restaurantOpen:
time.sleep(random.randint(1,5))
print "Waiting for child"
#join
for thrd in philosopher:
thrd.join()

วันอาทิตย์ที่ ๖ เมษายน พ.ศ. ๒๕๕๑

สร้าง Folder Bookmarks บน Firefox

เปิด Firefox ขึ้นมาแล้วก็ คลิ๊กขวาที่ Bookmarks Toolbar หาเจอไม๊ ใต้ช่อง search อ่ะ แถวนั้นทั้งแถวเลยเรียกว่า Bookmarks Toolbar บริเวณที่ผมคลิ๊กขวาในรูปหน่ะ (เฮือก!! ติดร่องรอยการค้นหาเราด้วย) (เฮือก!! อีกที่ติด Blog พี่เทพมาด้วย) ต่อไปก็เลือกชื่อ Folder ที่ใช้ในการเก็บ Bookmarks ของเราจัดไป !! แล้วมันก็จะมี Folder ขึ้นแบบนี้ หรือคล้ายๆ กันบน windows แล้วก็ลากจาก tab ของหน้าที่เราเปิดจะ bookmarks เข้าไปเลย ทีนี้เราก็เก็บเว็บที่เราชอบไว้ได้อย่างเป็นระเบียบเรียบร้อยแล้ว หาง่ายด้วย ลืมภาพตอนทำเสร็จแล้วง่ะ ไม่ต้องมีก็ได้มะ


แถม
ตอนแรกนะว่าเขียนเรื่องนี้เรื่องเดียวแหละ, แต่ว่าวันนี้กลับเปิดเครื่องขึ้นมาเป็น Ubuntu แล้วเราก็ทำการเก็บภาพตัวอย่าง, กด print screen ไปตามเรื่อง, ปรากฏว่ามันไม่ได้ หว่ะเฮ้ย !!? เกิดอะไรขึ้นหว่า ทำไมทำไม่ได้ กดใหญ่เลย กดๆๆๆ

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

เนื่องจากตอนเก็บภาพหน้าจอเพื่อทำตัวอย่างของผมปกติ จะให้ สภาวะของ mouse มันค้างอยู่อย่างนั้นแล้วก็กด print screen เลยอย่างในภาพแรกนี้เป็นต้น มันทำไม่ได้ครับใน ubuntu เหมือนว่ามันสถานะของ mouse ค้างอยู่จะทำอะไรอย่างอื่นไม่ได้

ถามอาจารย์เลยครับทีนี้เราไม่ใช่คนแรกที่เจอปัญหาแน่ google เลยครับ แล้วในที่สุดก็ได้วิธีมาครับ ไม่งั้นวันนี้ไม่ได้เขียนแน่ ก็เลยเอาวิธีนี้มาบอกด้วยเลย

การ print screen บน linux ubuntu,gnome จริงๆแล้วมันก็ไม่ได้ยากหรอกนะแต่เราไม่รู้ ง่ายมากเลย -"- ดูภาพเอาล่ะกัน

จาก นั้นมันก็จะขึ้นหน้าจอเตรียมถ่ายรูปให้เรา เลือกเลยครับ ภาพเดี่ยว(เฉพาะ window ที่เลือกอยู่) ภาพหมู่(ทั้งหน้าจอ) แล้วก็เลือกเวลาที่เราจะเตรียมตัว Act !! ทีนี้จะทำอะไรก็ทำครับแล้วก็ Act ค้างรอไว้ แล้วก็ แช๊ะ!!



แล้วก็ได้วิธีการถ่ายรูปมาแล้ว

วันพุธที่ ๒ เมษายน พ.ศ. ๒๕๕๑

วิธีการช่วยลดโลกร้อน(จาก computer)

จาก techlogg.com แล้วเอามาต่อเอง 1. ปิดเครื่องทุกครั้งหลังใช้งานเสร็จ(ไม่ต้องอธิบายให้ยืดยาวมัง) 2. ลดความเข้าแสงของ หน้าจอ (ง่ายๆ) 3. ปิดโมเด็ม ADSL ของคุณตอนกลางคืน(หรือเมื่อไม่ได้ใช้) 4. ปิดให้ครบทุกอย่างไม่ใช่แค่เครื่อง หน้าจอ printer อุปกรณ์ต่างๆ จนกระทั่งเครื่อง server เฮ้ย!!(อันนี้ล้อเล่น 5. ตั้งค่า Power management เช่น ตอนเราลุกไปไหนนานๆ แล้วลืมปิดจะได้ให้เครื่องจะไ้ด้ sleep ตัวเองลงได้ไง ต่อเติมล่ะนะ 6. เล่น msn ให้น้อยลง งานเสร็จเร็วปิดเครื่องเร็ว 7. เขียน Blog ให้มากขึ้นเวลาหาข้อมูลอะไรจะไ้ด้เจอที่มีประโยชน์จริงๆ เร็วๆ (ไม่ไปเจอแต่ Spam) ยิ่งหาช้าไม่เจอเร็วๆ ยิ่งเปลืองไฟ 8. ลดการดูหนัง AV จากนี่ (เอิ๊กๆ) 9. ไปไหนนานๆ ก็ปิดเครื่องพักบ้าง ไม่ว่าจะเป็น ปิดจอ,Stand by,Hibernate ซึ่งวิธีเหล่านี้เมื่อกลับมาเปิด เครื่องใช้เวลาเพียงเล็กน้อยเท่านั้น และอะไรที่เปิดไว้ก็ยังอยู่ในสภาพเดิมด้วย เท่านี้แหละมีอะไรเพิ่มเติมก็เข้ามาเม้นๆ บอกกันนะ ปล.เรื่องการใช้หน้าจอสีดำๆ นี่เริ่มไม่แน่ใจล่ะจาก techlogg

กวีในบันทึกของแม่:1

ดอกไม้สวยที่สุดในโลก ยังไม่บาน

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