Some ZIPs file was created with non-UTF8 encoded filename. We can unzip it with following command:
UNZIP="-O tis620" unzip -x somefile.zip
You may replace tis620 with other encoding.
Some ZIPs file was created with non-UTF8 encoded filename. We can unzip it with following command:
UNZIP="-O tis620" unzip -x somefile.zip
You may replace tis620 with other encoding.
ข้อความข้างต้นฟังดูแล้วอาจแทงใจดำ แต่นี่คือความจริงที่คนไทยกำลังเผชิญหน้าอยู่ (และไม่มีใครกล้าที่จะออกมาบอก)
หัวข้อนี้ผมได้มาจากการไปฟังเสวนา “Very Thai: Cultural Filter” โดย Philip Cornwel-Smith ผู้เขียน “Very Thai” หนังสือที่ว่าด้วยวัฒนธรรม “แบบไทยๆ” ที่เราเองก็ไม่เคยสงสัย หาความหมาย หรือ ตั้งคำถามกับพวกมันมาก่อน เช่น การเอาทิชชู่สีชมพูมาห่อช้อนส้อม หรือ ทำไมไฮโซต้องตีกระบัง
จากความรู้ที่ได้รับตลอดเกือบสองชั่วโมงจากหนึ่งในคนที่มองสังคมไทยแบบถึงกึ๋นที่สุด
ประโยคที่ผมฟังแล้วถึงกับต้องหยิบสมุดมาจดในทันที (และเป็นที่มาของ blog นี้) คือ
Foreign Designers of ‘Thai Style’ were more Freedom
นักออกแบบชาวต่างชาติมีอิสระมากกว่า (คนไทย) ในการเล่นกับ ‘ความเป็นไทย’
View original post 203 more words
ก่อนหน้านี้เคย
อัพโหลดไฟล์บางนามสกุลไม่ได้ ตัวอย่างโค้ดเลยไปฝากไว้กับ github page แทน
แต่ไม่ต้อง maintain เอง เย้!
เคยใช้ SMACK library ในการทำงานครับ ต้องเขียนโปรแกรมคุยผ่านโปรโตคอล XMPP (ที่ใช้ใน GTalk)
ระหว่างหัดเขียนอย่างงงๆ ก็ใช้ feature IBB (In-Band Bytestream) เพื่อส่งไฟล์ครับ
ปรากฏว่าเจอปัญหาแปลกๆ เหมือน SMACK มันคุยกับ server คนอื่นไม่รู้เรื่อง เลยไปไล่ๆ อ่าน XEP (XMPP Extension Protocol) ปรากฏว่า น่าจะมีสักคนที่ implement ไม่ตรงตาม protocol
ก็ส่ง patch เข้าไป เขาก็รับครับ… ดีใจ 🙂
http://community.igniterealtime.org/message/234808
ผ่านไป 3 ปี, protocol มีการปรับปรุงแก้ไขนิยามที่คลุมเคลือ จาก
The base64-encoded data to be sent, prior to any wrapping in the element and IQ or message stanza, MUST NOT be larger than the ‘block-size’ determined in the bytestream negotiation.
เป็น
The data to be sent, prior to base64-encoding and prior to any wrapping in XML, MUST NOT be larger than the ‘block-size’ determined in the bytestream negotiation.
กลายเป็นว่า protocol โดนปรับให้ตรงกับ implementation ที่มีแพร่หลายครับ และ patch ก็โดน reverse แล้วครับ
เผอิญค้นไปเจอรูปนี้ในเครื่อง 🙂 หยิมมาแปะไว้บนบล็อกกันหาย
เคยมั้ยครับ? เล่นเกมแล้วสงสัยว่า คอมมันคิดยังไงนะ… ผมเคยเล่นเกมต่อจุดแล้วแพ้มันตลอดเลย (เกมที่ใครต่อจุด 5 จุดเป็นเส้นตรงได้ก่อนชนะ)
พอไปเข้าค่าย อาจารย์ก็ให้ลองเขียนเกม OX ขึ้นมา ให้คอมคิดเองได้บนตาราง 3×3 แล้วเราก็ WOW!!
ผมได้รู้จักกับ Minimax ครั้งแรกก็ตอนเขียนโปรแกรมในค่ายหละครับ พอดีมีน้องๆ ที่โรงเรียนอยากทำ project เกมหมากรุก… ให้คอมเล่นสู้กับคนได้ เลยลองวาดๆ รูปข้างบน อธิบายให้น้องฟัง
ไม่แน่ใจว่าน้องฟังเข้าใจรึเปล่า แต่ก็เห็นเขียนออกมาได้แฮะ 😀
เกม OX: ใครเรียง O หรือ X ได้ครบ 3 ในแนวตั้ง แนวนอน หรือทแยงมุมได้ก่อนเป็นผู้ชนะ
ภาพข้างบนอธิบายวิธีคิดของ คอม กับ คน(จำลอง) ในแต่ละตาครับ
คอม จะลองลงในช่องว่างที่เหลือ แต่ละช่อง และตัดสินใจเลือกว่า ลงช่องไหนแล้วทำให้ตัวเองชนะได้
คน จะลองลงในช่องว่างที่เหลือ แต่ละช่อง และพยายามเลือกว่า ลงช่องไหนแล้วทำให้ตัวเองชนะได้
ถ้าการลงครั้งนั้น ยังไม่รู้ว่าผลจะออกมาเป็นยังไง ก็คิดต่อไปจนกว่าจะจบเกมส์… คิดลึกลงไปเรื่อยๆ ตาม Pseudocode นี้
เกม OX ที่มีตารางขนาด 3×3 เราสามารถคิดรูปแบบที่เป็นไปได้จนจบเกมส์ได้…
แต่เกมส์ที่ซับซ้อนขึ้นเช่น OX ขนาด 4×4 (คอมคิดนานหน่อย) หรือหมากรุกไทย หมากรุกฝรั่ง
โปรแกรมอาจไม่สามารถคิดล่วงหน้าไปจนจบได้… เพราะรูปแบบที่เป็นไปได้เยอะมากกกก
คนเขียนโปรแกรมเลยต้องตัดสินใจว่าจะคิดล่วงหน้าไปกี่ตา… แล้ววัดว่า กระดานหมากรุกนั้น คอมหรือคนมีโอกาสชนะ/แพ้มากน้อยแค่ไหน 🙂
ผมใช้มือถือ Android มาโดยตลอด แต่ตอนตัดสินใจซื้อ tablet ได้ไปลองเล่น iPad 2 กับ Galaxy Tab 10 เทียบกันดู ปรากฏว่าความลื่นไหลของ iPad 2 นี่มันสุดยอดจริงๆ (ณ เวลานั้นน่ะนะ ตอนนี้เปลี่ยนมาใช้ Nexus 7 ละ :P)
ระหว่างใช้ iPad ก็นึกสงสัย ว่าทำไมแอพดังๆ หลายตัวมันถึงมี User Experience (UX) แบบนี้เนี่ย ถ้าปรับปรุงอีกหน่อย ผู้ใช้จะสะดวกขึ้นอีกเยอะเลย
วันนึงผมมีโอกาสได้เขียนโปรแกรมบน iOS แล้วได้พบกับข้อจำกัดหลายๆ อย่างของ Apple Push Notification (APN) ซึ่งมีทั้งข้อดี/ข้อเสีย และก่อให้เกิดข้อจำกัดกับ UX ของแอพใน iOS เอง
วันนี้เลยอยากแชร์ข้อจำกัดนั้น (“ทำไมแอพมัน…ฟระ”), ข้อดีข้อเสียของ APN, และท่า Compromise เทพๆของแอพ Facebook เพื่อปรับปรุง UX ครับ
ตอนแรกผมก็โทษโปรแกรมเมอร์ครับ… ทำไมแกไม่ออกแบบแอพให้ดีกว่าเน้!
พอได้เขียนโปรแกรมกับ APN แล้วเริ่มเข้าใจหัวอกคนทำแอพมากขึ้น
We can check for Ctrl-C with KeyboardInterrupt exception as follows:
try: while True: print "Echo ", raw_input(">") except KeyboardInterrupt: print "Good bye"
When python process was killed, we will not get KeyboardInterrupt. But we can instead catch SIGTERM sent by kill command.
In order to catch SIGTERM, we can do:
import signal import sys def signal_term_handler(signal, frame): print 'got SIGTERM' sys.exit(0) signal.signal(signal.SIGTERM, signal_term_handler)
List of signal is available in POSIX Signals. Note that SIGKILL cannot be caught.
บล็อกนี้ขอเปลี่ยนเรื่องจากการเขียนโปรแกรมบ้าง…. เพราะเขียนโปรแกรมอย่างเดียวเดี๋ยวเครียดเกิ๊น!
Live abroad ในชื่อเรื่องไม่ได้หมายถึงการเดินทางไปเรียนหรือใช้ชีวิตในต่างประเทศ แต่เป็นการไปใช้ชีวิตกินกับนอนอยู่บนเรือดำน้ำแทนครับ (ขอย้ำว่า กิน นอน ดำน้ำ กิน นอน ดำน้ำ จริงๆ)
เรือดำน้ำ!…. พูดผิดแบบนี้อยู่เรื่อย แล้วคนก็ตกใจ… ผมหมายถึง เรือที่นักดำน้ำนั่งไปดำน้ำ แต่เรือไม่ได้ดำลงไปใต้น้ำนะครับ (แต่ถ้าเรือมันจมล่ะก็ ได้ดำน้ำกันจริงๆ ละทีนี้)
Live abroad ครั้งแรกนี้ ไปอันดามันใต้กับพี่โพ Let’s go dive บนเรือ SCUBANET เมื่อต้นเดือนเมษาที่ผ่านมา
4 วันที่อยู่บนเรือ… ชีวิตมี routine มากครับ แต่ก็ happy ที่มี routine แบบนี้นะ
07:00 น. กัปตันกดกริ่งปลุก… กรี๊งงง….. วันแรกๆ ทุกคนก็กระตือรือร้น ออกจากห้องนอนขึ้นมานั่งฟัง brief ว่า dive แรกของวันจะไปที่ไหนยังไง… วันหลังๆ กัปตันต้องกดกริ่งหลายครั้งเหมือนกัน กว่าจะขึ้นมากันครบ อิๆ
08:00 น. ขึ้นกับว่า เราเป็นกลุ่มดำน้ำกลุ่มแรก หรือกลุ่มที่สอง ถ้ากลุ่มแรกก็ต้องรีบแต่งตัวเตรียมกระโดดน้ำแต่เช้า ถ้าเป็นกลุ่มที่สองจะมีเวลาโอ้เอ้ได้อีกนิดหน่อย 😛
พอขึ้นจากน้ำ ล้างตัวเล็กน้อยเปลี่ยนชุดเสร็จ อาหารเช้าก็พร้อม
พอกินข้าวเสร็จก็เข้าไปนอนดูทีวี/หนัง คร๊อกฟี้รอ dive ถัดไป ชีวิตก็วนแบบนี้ไปเรื่อยๆ 4 วัน 🙂
เป็นครั้งแรกที่ได้ดำน้ำตอนกลางคืน รู้สึกตื่นเต้นบ้าง แต่ก็เป็นการดำน้ำที่รู้สึกมีสมาธิและสติมาก รอบข้างมืดไปหมด มีแต่ไฟฉายในมือที่ช่วยให้เรามองเห็น
มีฉากหนังฉากนึง ที่ผมว่ามันคล้ายๆ กับบรรยากาศที่เห็นใต้น้ำตอนกลางคืน (อาจดูเว่อร์ไปหน่อย) ก็คือ
ฉากหนังในเรื่อง Terminator ที่มีเครื่องบินไล่ล่าส่อง Spotlight หาคน
ในตอนกลางคืนนี้เอง ก็เป็นนักดำน้ำที่เหมือนเป็นเครื่องบินไล่ล่าส่องไฟฉายหาปลา (จากมุมมองเว่อร์ๆ ของปลา)
“ฮว้ากก…นี่มัน UFO นี่นา” said ปลาสิงโต
หลังจากที่กิน และเมาเรือ และนอน และตื่นขึ้นมาเมาเรือกลางดึก…. เราก็ได้ขึ้นบกไปเกาะหลีเป๊ะ
พี่โพบอกว่า การมา live abroad ทำให้เราเดินทางไปเกาะหลีเป๊ะได้สบาย(เหนื่อยน้อย) ที่สุดแล้ว
เดินทางด้วยเรือยาง (Dinghy) จากเรือไปเกาะใช้เวลาไม่เกิน 5-10 นาทีถ้วน 😛
คืนที่สองมีคนลงน้อย เราเลยได้นั่งเรือยางออกไปม้วนหลังลงน้ำ (back roll entry)
ความท้าทายที่ 1: ต้องแบก tank ไว้และนั่งให้ tank ยื่นออกไปนอกเรือยาง เราต้องแบก เกาะ จับและทรงตัวไม่ให้พลัดตกระหว่างเรือวิ่ง (ไม่งั้นอาจได้เปลี่ยนจุดดำน้ำ หะๆ)
พอถึงจุดดำน้ำ และ back roll ลงน้ำแล้ว… ปรากฏว่า ได้ทำระบำใต้น้ำแทน… ขาชี้ฟ้าอยู่ 2-3 วินาที ในใจก็คิดว่า เอ๊… จะทำยังไงให้ขามันจม แล้วหัวกับตัวลอยขึ้นมาน๊า…. พยายามเอาขาลง อีกอึดใจมันก็ทำได้แฮะ
ความท้าทายที่ 2 คือ การถอดอุปกรณ์ในน้ำ (weight belt, bcd, fin, …) แล้วพยายามปีนขึ้นเรือ
จริงๆ น่าจะเคยโพสต์ไปแล้ว แต่ขอรวบรวมให้มันอยู่ในบล็อกอันนี้ละกันนะครับ
อย่าลืมดูแบบ 1080p นะครับ 😉
ชิวๆ ใต้น้ำ 🙂
ปล. น่าจะมีใช้ศัพท์ ใช้คำพูดผิด comment ได้เต็มที่เลยครับ 🙂
ปล2. ขอบคุณพี่โพ พี่กอล์ฟ พี่ปลา พี่โอ๋ พี่เส ที่ทำให้ trip นี้สนุกมากเลยครับ ^_^
นาย Schlemiel เป็นช่างทาสี เขารับงานตีเส้นถนน
วันแรกทาสีได้ 300 เมตร หัวหน้าเขาก็ชมว่า “เยี่ยมมากเลย”
วันที่สองทาสีได้ 150 เมตร หัวหน้าบอกว่า “อืม ก็ยังโอเคอยู่นะ”
วันที่สามทาสีได้ 30 เมตร หัวหน้าเขาบอก “เฮ้ย นี่มันใช้ไม่ได้เลยนะเนี่ย วันแรกแกตีได้มากกว่านี้ตั้ง 10 เท่า”
ช่างทาสีบอกว่า “ช่วยไม่ได้นี่นา ก็กระป๋องสีมันอยู่ไกลจากฉันมากขึ้น มากขึ้นทุกวัน”
เขาวางกระป๋องสีไว้ที่จุดเริ่มต้น โดยไม่ได้ย้ายมันตามมา เขาจึงต้องเดินกลับไปไกลขึ้นๆ ทุกครั้งที่เดินกลับไปจุ่มแปรงสี
เรื่องนี้แต่งขึ้นโดย Joel Spolsky เพื่อเลียนแบบพฤติกรรมของ C String ที่การ concatenate ทำได้ช้า เพราะต้องวิ่งจากหัว string ไปจนสุด string ก่อนทุกครั้ง ถึงจะหาตำแหน่งเพื่อเขียน string ต่อท้ายได้ครับ
อ่านเพิ่มได้ใน http://en.m.wikipedia.org/wiki/Schlemiel_the_Painter’s_algorithm