tag:blogger.com,1999:blog-104817512009-02-21T18:02:48.648+07:00golB s'uAauhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.comBlogger31125tag:blogger.com,1999:blog-10481751.post-91466370431197377272008-06-19T02:21:00.001+07:002008-06-19T02:22:43.413+07:00รู้มั๊ย<div style="text-align: center;"><span style="font-weight: bold; font-family: Tahoma;font-size:xx-large;" >รู้มั๊ยอ่ะ</span><br /><br /><span style="font-weight: bold; font-family: Tahoma;font-size:xx-large;" >ว่าเป็นห่วง</span></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-9146637043119737727?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com1tag:blogger.com,1999:blog-10481751.post-15523152425727349522008-05-12T23:21:00.003+07:002008-05-12T23:52:18.729+07:00ใช้ Queue ใน Pythonคนที่เคยทำงานกับ threading ใน Python น่าจะเคยเจอปัญหาในการจัดการกับ lock มาบ้างไม่มากก็น้อย<br /><br />ใน Python ก็มี module ตัวนึงชื่อว่า Queue มาช่วยจัดการปัญหานี้ <br /><br />วิธีการทำงานของมันจะคล้ายกับการทำงานแบบ multithreading ทั่วไป กล่าวคือมีตัวคิวเป็นตัวแจกงาน<br />และ worker วิ่งเข้ามารับงานไปเรื่อยๆ จนกว่าจะหมด<br /><br />ข้อดีของ Queue ก็คือเราสามารถเลี่ยงปัญหา race condition ได้ เพราะ Queue จะจัดการพวก lock ต่างๆ ของมันเอง<br />ตัวอย่างรูปแบบการใช้งาน Queue แบบหนึ่ง<br /><br /><pre><br /> ---------<br /> | Queue |<br /> ---------<br /> / | \<br /> / | \<br /> / | \<br /> ----- ----- -----<br /> | W | | W | | W |<br /> ----- ----- -----<br /> | | |<br /> | | |<br /> -----------------<br /> | Results |<br /> -----------------<br /></pre><br /><br />เริ่มต้นเลยต้องสร้าง Queue instance ขึ้นมาก่อน<br /><pre><br />import threading<br />import Queue<br /><br />cmdqueue = Queue.Queue()<br /></pre><br /><br />จากนั้นเราจะต้องสร้าง worker function ขึ้นมาก่อน โดนสั่งให้ worker อยู่เฉยๆ รอ item ที่มาจากคิว มาดูตัวอย่างกัน<br /><pre><br />def workerThread(queobject):<br /> while True:<br /> vars = queobject.get()<br /> print vars<br /> queobject.task_done()<br /></pre><br /><br />queobject ในที่นี้คือ Queue instance ที่เราจะส่งเข้าไปให้นั่นเอง<br />โปรดสังเกตว่ามี method ชื่อ get() กับ task_done() อยู่ในที่นี้<br />queobject.get() ทำหน้าที่รับข้อมูลจาก queue มา method นี้โดยค่าปริยายจะหยุดทำงาน จนกว่าจะมีข้อมูลมาจาก queue<br />พอทำงานเสร็จปุ๊บ เราก็จะบอกคิวว่า worker ตัวนี้ว่างแล้ว เอางานใหม่มา โดยใช้ method ชื่อ queobject.task_done()<br />อย่าลืมเชียวนะครับ!<br /><br />หลังจากที่เรามีคิวและ worker เรียบร้อยแล้ว ก็ถึงเวลาสั่งให้ worker ทำงาน โดยใช้ threading.Thread<br /><pre><br />for i in range(4):<br /> worker = threading.Thread(target=workerThread, args=(cmdqueue,))<br /> worker.setDaemon(True)<br /> worker.start()<br /></pre><br />Worker 4 ตัวจะ start ขึ้นมาเพื่อรอข้อมูลจากคิว ใครที่ถนัดหน่อยสามารถใช้ module อื่นๆ เอาจำนวนของ cpu ของเครื่องมาใช้ก็ได้<br /><br />ตอนนี้เราก็มีทุกอย่างพร้อมใช้งาน เราสามารถส่งข้อมูลเข้าไปในคิวได้แล้ว วิธีส่งก็ใช้ method ชื่อ put แบบนี้<br /><pre><br />for i in range(2000):<br /> data = {<br /> 'id': i,<br /> }<br /> cmdqueue.put(data)<br /></pre><br /><br />ข้อสังเกต: ถ้าเอาโค้ดนี้ไปรันเลย เราจะไม่ได้อะไรออกมา เพราะว่า python จะไม่หยุดรอ (block) ให้ queue ว่าง หลังจากที่ put ข้อมูลเข้าไปแล้วจะถือว่า process นั้นเสร็จสิ้นทันที เราตั้งค่า setDaemon(True) ไว้ตอน start worker เพื่อที่จะให้ worker ทั้งหลายตายไปพร้อมกับตัว process กันปัญหา zombie thread<br /><br />Queue instance มี method ที่ชื่อว่า join() เอาไว้สั่งให้ตัว program block ไว้จนกว่าทุกอย่างใน queue จะถูกดึงออกไปและได้รับ task_done() กลับมา แบบนี้<br /><br /><pre><br />for i in range(2000):<br /> data = {<br /> 'id': i,<br /> }<br /> cmdqueue.put(data)<br />cmdqueue.join()<br /></pre><br /><br />เป็นอันเสร็จสิ้น ลองเล่นได้เลยครับ<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-1552315242572734952?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-51611850097038623072008-05-05T10:07:00.002+07:002008-05-05T10:21:28.181+07:00just a big boy private clubI have been encountering with Buddhism related matter during past few weeks. It has shaken my faith in Buddhism that I have been holding on to for years.<br /><br />I myself is a Buddhist. I believe in its doctrine. I behave the way Buddhist should behave, though not all of what other people have been doing, but that's not a big deal.<br /><br />The story of one monk and his female friend has come to my attention. Talking to female is not prohibited for monk. But he must talk to female ones without passion. (At least that's my understanding) <br /><br />That monk calls and talks to his female friend for more than 30 minutes every night. Plus longer time during holidays. He also mentioned about other monks bullying young newly ordained monks and videotaped them.<br /><br />This totally ruins my belief and faith in what I am believing.<br />You made yourself become a monk because you want to study Buddhism's doctrine, discipline yourself and learn how to live calmly.<br /><br />Not just to be a part of big boy private club, where people who can join must be bald, no eyebrows, wearing orange and do not eat dinner.<br /><br />I believe there's a lot of Supatipanno (Monk who does good). I tend to make myself hold on to those monks. I wish them with all my heart the courages to continue studying and spreading out good Buddhism doctrines.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-5161185009703862307?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-18199715413861742062008-01-15T18:03:00.000+07:002008-01-15T18:19:38.957+07:00XML-RPC แบบง่ายๆ กับ pythonXML-RPC เป็น Remote Procedure Call ประเภทนึงที่ใช้ XML เป็นสื่อกลางในการส่งข้อมูลผ่านตัวแปร HTTP<br /><br />Python สามารถทำงานกับ XML-RPC ได้ทั้งเป็น XML-RPC Server หรือเป็น XML-RPC Proxy<br />พูดง่ายๆ ก็คือเราเรียกใช้ Class หรือ Function ที่อยู่บน Server ได้โดยที่ไม่ต้องเขียน Network Server เอง<br /><br />Module หลักๆ ที่จะใช้ก็คือ SimpleXMLRPCServer กับ xmlrpclib<br />การใช้งาน server แบบง่ายๆ ก็คือ<br /><br /># ตัวอย่าง class ที่อยู่บน Server<br /><br /><pre><br />class xmlrpcsample:<br /> def printme(textmesg):<br /> return textmesg.upper()<br /></pre><br /><br />ต่อไปเราก็สร้าง XML-RPC Server<br /><br /># server bind เข้ากับทุก interface ที่ port 12345<br /><br />address = ('0.0.0.0',12345) <br />server = SimpleXMLRPCServer.SimpleXMLRPCServer(address)<br /><br /># สร้าง class object มา<br /><br />classobj = xmlrpcsample()<br /><br /># register ตัว class เข้ากับ XML-RPC server<br /><br />server. register_instance(classobj)<br /><br /># เริ่มทำงานได้<br /><br />server.serve_forever()<br /><br />เป็นอันว่าจบในส่วนของ Server ต่อไป Client จะเรียกใช้งาน Class นี่ที่อยู่บน server ก็ใช้งานง่าย<br /><br /><blockquote>import xmlrpclib<br />server = xmlrpclib.ServerProxy("http://127.0.0.1:12345")<br />server.printme('helloworld')</blockquote><br /><br />เป็นอันจบ<br />ข้อควรระวัง function ต้อง return ค่าทุกครั้ง ถ้าไม่ return ค่า จะต้อง set allow_none=True ตอนที่เรียก ServerProxy<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-1819971541386174206?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-43563272479603210862007-05-06T17:31:00.000+07:002007-05-06T17:59:49.827+07:00ชีวิตในปี 1973 กับ 2007เห็นว่าฮาดี เลยแปลเก็บไว้<br /><br /><br />เหตุการณ์: แจ๊คขับรถเข้าไปจอดในที่จอดรถของโรงเรียน พร้อมกับปืนในที่เก็บปืนหลังรถ<br />1973: ครูใหญ่เดินออกมา มองไปที่ปืนของแจ๊ค เดินไปที่รถของครูใหญ่แล้วหยิบปืนของเค้ามาอวดบ้าง<br />2007: โรงเรียนปิดตาย FBI ถูกเรียกมา แจ๊คถูกส่งเข้าคุกและไม่มีโอกาสได้เห็นรถหรือปืนของเค้าอีกเลย จิตแพทย์ถูกเรียกมาเพื่อรักษาครูและนักเรียนที่บาดเจ็บทางจิตใจ<br /><br /><br />เหตุการณ์: จอห์นนี่และมาร์คมีเรื่องทะเลาะและชกต่อยกันหลังเลิกเรียน<br />1973: ผู้คนเข้ามามุงดู มาร์คชกชนะ ทั้งคู่จับมือกันแล้วกลายเป็นเพื่อนรักกัน<br />2007: ตำรวจเข้าคุมสถานการณ์ หน่วย SWAT ถูกเรียกมาเพื่อจับกุมทั้งคู่ ในข้อหาทำร้ายร่างกาย ทั้งคู่โดนไล่ออก แม้ว่าจอห์นนี่จะเป็นคนเริ่ม<br /><br /><br />เหตุการณ์: เจฟฟรี่ย์อยู่ไม่นิ่งในห้องเรียน รบกวนคนอื่นๆ<br />1973: เจฟฟรี่ย์ถูกส่งไปห้องครูใหญ่ ถูกตี กลับมานั่งเรียนนิ่งๆ<br />2007: เจฟฟรี่ย์ถูกบังคับให้กินยา Ritalin จนกลายเป็นซอมบี้ ขณะที่โรงเรียนได้เงินเพิ่ม เพราะเจฟฟรี่ย์อยู่ในหมวดนักเรียนพิการ<br /><br /><br />เหตุการณ์: บิลลี่ทำกระจกของพ่อแตก แล้วถูกพ่อตี<br />1973: บิลลี่วังมากขึ้น โตขึ้นมาเป็นคนปกติ เรียนต่อมหาวิทยาลัย และกลายเป็นนักธุรกิจที่ประสบความสำเร็จ<br />2007: พ่อของบิลลี่ถูกจับกุมข้อหาละเมิดสิทธิเด็ก บิลลี่ถูกส่งไปอยู่ในบ้านอุปถัมภ์ และเข้าแก๊ง (มีต่อ แต่ไม่ค่อยเกี่ยวกับบิลลี่ เลยไม่แปล)<br /><br /><br />เหตุการณ์: มาร์คปวดหัว เลยเอายาแก้ปวดหัวไปโรงเรียน<br />1973: มาร์คแบ่งยาให้กับครูใหญ่ ในบริเวณสูบบุหรี่<br />2007: มาร์คถูกตำรวจจับกุมในข้อหาพกพายา ถูกไล่ออก รถของเค้าถูกค้นเพื่อหายาและอาวุธ<br /><br /><br />(ข้อต่อจากอันนี้ไม่แปล เนื่องจากเป็นตลกการเมือง)<br /><br /><br />เหตุการณ์: จอห์นนี่เอาเศษประทัด ที่เหลือจากงานดอกไม้ไฟวันชาติ ใส่ในขวดสี แล้วเอาไปจุดใส่รังมด<br />1973: มดตาย<br />2007: กระทรวงความมั่นคงแห่งมาตุภูมิ, หน่วยปราบปรามยาเสพย์ติดและอาวุธ และ FBI ถูกเรียกมา จอห์นนี่ถูกตั้งข้อหาก่อการร้ายภายในประเทศ FBI สอบสวนพ่อแม่ของจอห์นนี่ พี่น้องของเค้าถูกแยกไปอยู่บ้านอุปถัมภ์ คอมพิวเตอร์ถูกยึด พ่อของจอห์นนี่ถูกใส่ชื่อไว้ในบุคคลที่ต้องถูกจับตามอง และไม่สามารถขึ้นเครื่องบินพาณิชย์ได้อีกตลอดชีวิต<br /><br /><br />เหตุการณ์: จอห์นนี่หกล้มหัวเข่าถลอกขณะที่กำลังวิ่งในช่วงปิดเทอมแล้วร้องไห้ ครูแมรี่เข้ามาปลอบใจและกอดเค้า<br />1973: แป๊บเดียวหลังจากนั้นจอห์นนี่รู้สึกดีขึ้น และกลับไปวิ่งเล่นต่อ<br />2007: ครูแมรี่ถูกกล่าวหาว่าเป็นนักล่าสวาทและถูกให้ออกจากงาน พร้อมถูกจำคุกสามปี<br /><br /><br />บ้ากันได้ฮาจริงๆ<br /><br /><b>ที่มา:</b> http://www.insane.com/jokes-1973-vs-2007/<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-4356327247960321086?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com1tag:blogger.com,1999:blog-10481751.post-3691008688576918332007-03-09T22:44:00.000+07:002007-03-09T23:16:09.757+07:00จัดการกับ command line argumentเวลาเรียกใช้งานโปรแกรม การ parse ค่า parameter ต่างๆ มักจะเป็นเรื่องน่าปวดหัว ถึงขนาดว่าต้องมีตัวช่วยเช่น GNU getopt มาดูกันว่าใน Python จะง่ายขนาดไหนกับการอ่านค่า parameter ที่ส่งผ่านมาจาก command line<br /><br />ใน Python มีหลายวิธีที่เราจะจัดการกับ command line argument หรือเรียกให้เท่ๆ ว่า argv (argument vector) โดยมีโมดูลหลายตัวที่จะทำให้เรายุ่งวุ่นวายกับ argv พวกนี้ได้ ตัวแรกที่เป็นพื้นฐานที่สุด คือโมดูล sys นี่เอง อีกตัวนึงที่มี feature หรูหราฟู่ฟ่าขึ้นมาหน่อย คือโมดูลชื่อ getopt ซึ่งจะคล้ายๆ กับ package getopt ของ GNU แต่การใช้งาน getopt ยังไม่ง่ายสมชื่อ Python เลยมีโมดูลชื่อ optparse ซึ่งออกแบบมาสำหรับการเรียกใช้งานโปรแกรมแบบ GNU/POSIX โดยเฉพาะ มาเริ่มใช้งานโมดูลตัวนี้กันเลยดีกว่า<br /><br />เริ่มต้น ก็ต้อง import เข้ามาก่อนตามระเบียบ เพราะโมดูลใน Python มาในรูปของ Class<br /><blockquote>import optparse<br />parser = optparse.OptionParser()</blockquote>ต่อจากนั้น ก็เริ่มทำงานได้ด้วยการเพิ่ม option ต่างๆ ที่เราต้องการเข้าไป เช่น<br /><blockquote>parser.add_option('-f','--file')</blockquote>method นี้จะเป็นการเพิ่ม option เข้าไปใน parser object ของเรา สังเกตว่ามันจะ support ทั้ง argument แบบสั้น -f หรือแบบยาว --file เพื่อลูกเล่นที่หรูหรากว่าเดิม method add_option ยังมีของเล่นอีก<br /><blockquote>parser.add_option('-f','--file',action='store',type='string',dest='filename')</blockquote>การกำหนดค่าต่างๆ สำหรับ add_option ก็คือการเพิ่มรายละเอียดเข้าไปในการ parse หา argument นั่นเอง action คือการกำหนดว่าหลังจาก parse เจออันนี้แล้ว ให้ทำอะไร ซึ่งค่าปริยายคือ store หรือให้เก็บค่าไว้ในตัวแปรตามชื่อที่เรากำหนดไว้ในส่วนของ dest<br /><br />type เป็นการกำหนดประเภทของ argument โดย optparse จะแสดงข้อผิดพลาด หากมีการใส่ค่า argument ที่ไม่ตรงตามกฎ เช่นเรากำหนด type ให้เป็น int แต่ผู้ใช้ใส่ค่ามาเป็น string โมดูลก็จะแสดงข้อผิดพลาดออกไปให้<br /><br />การจัดการกับ argument ที่เป็น boolean ก็สามารถทำได้ โดยการเปลี่ยน action เช่น<br /><blockquote>parser.add_option('-v','--verbose',action='store_true',dest='verbose')</blockquote>ถ้า optparse เจอ -v หรือ --verbose ใน command line argument มันจะทำให้ตัวแปรชื่อ verbose มีค่าเป็น True ทันที<br /><br />การกำหนดค่า default ก็ทำได้ง่ายๆ ด้วยการใส่ parameter default=xxx เข้าไปในส่วนของ method add_option และที่เด็ดสุดๆ ของ module ตัวนี้ คือการสร้าง help ให้เอง เพียงเราใส่ help='รายละเอียดการใช้งาน' เข้าไปเพิ่มในส่วนของ add_option เมื่อผู้ใช้พิมพ์คำสั่งตามด้วย -h มันก็จะแสดง help ออกมา ตัวอย่างคำสั่งแบบใส่ทุกอย่าง ก็จะดูคล้ายๆ แบบนี้<br /><blockquote>parser.add_option('-f','--file',action='store','dest='filename',default='/tmp/xxx',help='Specify file name')</blockquote>หลังจากกำหนดค่า option ให้หมดแล้ว ก็ต้องเรียกตัว parser ให้ทำงาน ด้วยคำสั่งแบบนี้<br /><blockquote>(optlist, args) = parser.parse_args()</blockquote>โมดูลก็จะจัดการ parse ค่าที่มาจาก command line ให้เราโดยเสร็จสรรพ ส่วนของ option (พวก -a -b -c หรือ --file อะไรทั้งหลาย) ก็จะถูกเก็บไว้ใน dictionary ชื่อ optlist และ argument ก็จะถูกเก็บไว้ใน list ชื่อ args นั่นเอง<br /><blockquote></blockquote><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-369100868857691833?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1171281315767343172007-02-12T18:41:00.000+07:002007-02-12T19:36:47.746+07:00โมดูล ConfigParserเวลาเขียนโปรแกรม สิ่งนึงที่สำคัญคือการสร้างและใช้งาน config file <br />Python มีโมดูลที่น่าใช้งานตัวนึงชื่อ ConfigParser ซึ่งมันสามารถอ่าน configuration file ที่อยู่ในรูปแบบเดียวกับ inf ไฟล์ได้ มาดูวิธีใช้งานแบบง่ายๆ กัน<br /><br />เริ่มแรกเลย ต้องมี config file ที่มีรูปแบบดังนี้<br /><blockquote>[section]<br />attr1 = value1<br />attr2 = value2<br /></blockquote><br />ต่อจากนั้นก็ import module เข้ามา ด้วยการใช้คำสั่ง<br /><blockquote>import ConfigParser</blockquote><br />โมดูลตัวนี้ประกอบด้วย class ชื่อ ConfigParser เราก็เลยต้อง instantiate module ขึ้นมาด้วยคำสั่ง <br /><blockquote>config = ConfigParser.ConfigParser()</blockquote><br />ขั้นตอนต่อไป เราจะใช้ method ชื่อ read() เพื่ออ่านไฟล์ config ดังนี้ โดยชื่อไฟล์อาจจะใส่เป็น path ไปเลยก็ได้ หรือว่าจะใส่ไว้ในค่าตัวแปร เพื่อความง่ายต่อการจัดการ<br /><blockquote>config.read("config.cfg")</blockquote><br />หลังจากนั้นเราก็เรียกใช้ method ชื่อ get, getint, getfloat, getboolean ได้ตามใจต้องการ โดยมี ตัวอย่าง syntax คือ<br /><blockquote>varname = config.get('section','attr1')</blockquote> <br />เราก็จะได้ค่ามาจาก config ไฟล์แบบง่ายๆ<br /><br />นอกจากนี้ module ConfigParser ยังทำอะไรได้อีกเยอะแยะ แต่ไม่มีเวลาอ่าน :-P<br />ถ้าสนใจไปหาอ่านได้ที่ http://docs.python.org/lib/module-ConfigParser.html<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-117128131576734317?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1159121998027594472006-09-25T01:19:00.000+07:002006-09-25T01:20:11.793+07:00i'm kyle!<div width="250" height="76"><embed src="http://www.comedycentral.com/games/assets/south_park/personality_quiz/images/animations/PQ-Kyle-v1.swf" quality="maximum" bgcolor="#61b4d6" width="250" height="300" name="http://www.comedycentral.com/games/assets/south_park/personality_quiz/images/animations/PQ-Kyle-v1.swf" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" scale="showall" name="index" /><br /><a href="http://www.comedycentral.com/motherload/?ml_collection=75235" target="_blank" border="0"><img src="http://www.comedycentral.com/games/assets/south_park/personality_quiz/images/images/SP-PQ-button-1.gif" width="134" height="76" border="0" alt="WATCH MORE CLIPS ON MOTHERLOAD"></a><a href="http://www.comedycentral.com/games/brainteasers/sp_personality_quiz_boys.jhtml" target="_blank" border="0"><img src="http://www.comedycentral.com/games/assets/south_park/personality_quiz/images/images/SP-PQ-button-2.gif" width="116" height="76" border="0" alt="FIND OUT WHICH CHARACTER YOU ARE"></a></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-115912199802759447?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1156601537954171822006-08-26T21:11:00.000+07:002006-08-26T21:12:17.973+07:00WOW!WOW!.. 5 Months after last post!<br /><br />I guess my fire is fading...<br />No power to do anything...<br /><br />sigh*<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-115660153795417182?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1144167393897937162006-04-04T23:10:00.000+07:002006-04-04T23:16:33.926+07:00Frens come and goTypical friends do come and go...<br /><br />They come to you when they want something from you.<br />They go away from you when you don't have anything to give them.<br /><br />They treat you like no one when you got nothing important to them.<br />They treat you like someone when you got something important to them.<br /><br />They saw you when you're important to them.<br />They didn't see you when you're not important to them.<br /><br />How long will I be able to live like this?<br />How long will I be able to be a good giver?<br />How long will I be able to ignore bad things that they've done to me?<br /><br />Do I have to live alone?<br />Or do they have to change?<br />Or is it me that have to change?<br /><br />Or it's my fault that I'm in wrong place, wrong time with wrong people?<br />To Thai people,<br />Internship = photocopying, faxing, making coffee and chatting?<br />Tech Show = where you can get a lot of notebooks, pens and t-shirts<br />Party = getting girls by saying 'making friends'<br /><br />Life sucks<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-114416739389793716?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1142270765233476342006-03-14T00:19:00.000+07:002006-03-14T00:26:05.256+07:00so what the heck are all these for??just finished my midterm exams... where people turned themselves into nerds and became a-s-s (in certain cases, they do!)<br /><br />had two parties in a row -_-' now i'm so sick of partying...<br /><br />and why do my friends HAVE TO HAVE LOVE PROBLEMS???<br />or it's just their attention-getters???<br /><br />people gone weird when they got drunk...<br />one girl cried, laugh and cried... <br />if love can do this to people? let's not have it...<br /><br />grow up! ! ! it's ok to cry ... but don't laugh then cry and then laugh again<br />it would hurt ur brain!... make u become an a-s-s faster!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-114227076523347634?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1138296041809829602006-01-27T00:13:00.000+07:002006-01-27T00:20:41.820+07:00It's technology that brought us togetherWho said technology makes people idiot?<br />I'm the one who's against that quote!<br /><br />Thanks to technology (Mostly from Apple) that brought me and my girlfriend together<br /><br />Although we're half a world apart - New York and Thailand,<br />Lots of my friends are having long-distant relationships too!<br />Obviously I'm the last man standing here :-)<br />One year and looking good<br /><br />Cheap overseas call through Skype<br />Nice VDO Chat via iChat - H. 264 is far beyond my expectation, even on 128k upstream link<br />"Our calendar" by iCal - No more time difference (with use of DAV)<br /><br />Cheers to inventors!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-113829604180982960?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1126369206292905442005-09-10T23:18:00.000+07:002005-09-10T23:20:06.300+07:00IRINN! Where the heck are you???No call, no IM, no.. no and no no no...<br /><br />I cannot call you, your mom pick up da phone - say she borrowed ur phone - and prolly will return it to you in 6 hours!<br />Do I have to wait until morning??!?!?!?!??!?! 8o| grrr grrr...<br /><br />skype me, then :-) miss you na roo pa hah?<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-112636920629290544?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com1tag:blogger.com,1999:blog-10481751.post-1126272583637128292005-09-09T20:21:00.000+07:002005-09-09T20:29:43.643+07:00Irinn, come back to meMy intention of writing this blog was to 'bitch' about anything that i want to (coz no one's gonna come and read it)<br /><br />and now, im gonna change it - let's say add another intention<br />TO TELL MY GIRLFRIEND HOW MUCH I LOVE (and MISS) HER!!!<br /><br />noon ka, I don't know how to say 'i miss you a lot' anymore laew<br />i already did it sooo many times<br /><br />I miss the time I'm being with you.<br />I miss your hug, your kiss and whatsoever we did when we're still together.<br /><br />Only the distance that keeps us apart, only distant (darn you!)<br /><br />although a lot of technologies keeps us in touch<br />but it's not like when I'm with real you roo mai?<br /><br />I'll wait for the day you come back ok?<br />I'll wait to see you running to me, jump and hug me at the airport :-P<br /><br />love you tee sud na ka<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-112627258363712829?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com1tag:blogger.com,1999:blog-10481751.post-1124217939122698742005-08-17T01:44:00.000+07:002005-08-17T01:45:39.130+07:00S+ARCK MouseFinally I bought it ... without being hesitate... <br /><br />S+ARCK!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-112421793912269874?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1122749037512699952005-07-31T01:39:00.000+07:002005-07-31T01:43:57.516+07:00Funny fact about WindowsA lot of my friends were bitching about how their windows laptops are dull, color-less and blah-blah...<br /><br />All they want is the 'dock' just like what is in my iBook :-)<br /><br />too bad, but it's only available in Mac OS !!!<br />then some people argued - no! there's a windows version available too!<br /><br />so I googled for "apple dock in windows xp" and got 300k++ results...<br />i guess a lot of windows users just LOVE the Dock!<br /><br />Redmond, start your photocopier!<br /><br />I also came up with this conclusion<br />"How to turn your PC into a Mac?" = "Sell it! and go buy Mac!" (dumb-dumb)<br /><br />cheers!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-112274903751269995?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1122481586515791032005-07-27T23:21:00.000+07:002005-07-27T23:26:26.520+07:00Sorry for undue developmentDear one domain name registrar<br /> I'm feeling very happy with your undergoing development to your system. You know how MUCH of loss you've caused me???!?!?? I gave AL(MOST)L my trust on you! More than 20 of my domain names are registered with you. And look what have you done to me!<br /><br />No more, I'm transferring all my domain names to some other 'more reliable' registrar<br /><br />YOU SUCK!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-112248158651579103?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1118806141568050932005-06-15T10:26:00.000+07:002005-06-15T10:29:01.573+07:00Now it's time for paperworkCAT IDC is now banning people who dont have 'proper' document to access their IDC.<br /><br />This sucks, how could I obtain a writen consent from my boss if something goes wrong at 2am in the morning??<br /><br />God bless CAT, they have to most stupid boards ever!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-111880614156805093?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1117557647094742982005-05-31T23:38:00.000+07:002005-05-31T23:40:47.096+07:00Everybody loves LingoBeen trying to write an ActionScript on Macromedia FlashMX for 2 hours. It turned out to be nothing.<br />This is far beyond my ability. Is there any way to have a on enterFrame() trigger like Lingo in Director?<br /><br />I'm switching back to Director :-P boo... Flash<br />(Maybe I'm stupid, there's such a thing in actionScript.)<br /><br />God bless<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-111755764709474298?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1115961010636087162005-05-13T12:08:00.000+07:002005-05-13T12:10:10.640+07:00how nerd I amJust took this nerd quiz, haha.. this is fun!!<br /><br /><a href="http://www.nerdtests.com/ft_nq.php?im"><img src="http://www.nerdtests.com/images/ft/nq.php?val=9603" alt="I am nerdier than 34% of all people. Are you nerdier? Click here to find out!"></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-111596101063608716?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1115299957748251302005-05-05T20:29:00.000+07:002005-05-05T20:32:37.756+07:00Tough life10 projects coming in ... yeahhh...<br />10 x 100 working hours are required... aww...<br />10 x xxx USD is coming also... woooww....<br />0.3 x 10 x xxx USD is also coming as TAX... mann...<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-111529995774825130?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1113765598772672942005-04-18T02:17:00.000+07:002005-04-18T02:19:58.773+07:00iBook speed booster!I never before thought that RAM can improve the overall performance this much.<br />Just bought a brand new 256MB SDRam for my iBook.. with the price around 55USD...<br /><br />What I got is amazing, stunning, shocking and awesomee<br />Never before my iBook got faster.. way faster<br /><br />cheers Mac..<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-111376559877267294?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1112771142429002342005-04-06T14:03:00.000+07:002005-04-06T14:05:42.430+07:00Sorry girlSorry my girlfriend, I just wanted you to be more grow-up.<br />I hope what I did did not hurt you.<br /><br />I'm sorry<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-111277114242900234?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1110898065886490922005-03-15T21:43:00.000+07:002005-03-15T21:47:45.886+07:00SorryAs a professor assistant, I had to do my duty, grading the exams.<br /><br />Unfortunately, scores that came out were not quite impressive for many people.<br />I made a lot of people cry, feeling miserable and somehow wanna drop the subject.<br /><br />Sorry, but I was just doing my duty. It's life, Take it!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-111089806588649092?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0tag:blogger.com,1999:blog-10481751.post-1108568563839283982005-02-16T22:41:00.000+07:002005-02-16T22:49:38.503+07:00LiveStrong LiveStrong<span style="font-family:verdana;">A pack of 10 Livestrong wristband has just arrived!</span><br /><span style="font-family:verdana;">How sweet, hope many people do still want it...</span><br /><br /><span style="font-family:verdana;">Using Mac is becoming easier and easier...<br /><br />Being a teacher-assistant can harm your life!<br />Students are yearning... (perhaps dying) for the SCORES!!!<br /><br />They're gonna buy me everything I want, just to make their scores up!<br />Christ, this world has gone insane...<br /><br />Peace out for those students.. amen<br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10481751-110856856383928398?l=aiau.blogspot.com'/></div>auhttp://www.blogger.com/profile/09491399995386634400noreply@blogger.com0