Friday, September 22, 2006

Java กับ Tail-Recursive

คุณสมบัติอย่างหนึ่ง ของภาษาคอมพิวเตอร์ในตระกูล Functional language (lisp, haskell, erlang)
ก็คือ ต้องสามารถ optimize tail-recursive ได้
โดยการ call แบบนี้ จะไม่มีการใช้ stack
เพื่อป้องกันการเกิดปัญหา stack overflow
(เนื่องจาก nature ของ Functional Language
มันส่งเสริมให้ใช้ recursive)

พึ่งรู้ว่า IBM JRE สามารถทำ optimize tail-recursive ได้เหมือนกัน
โดยทำ ณ ขณะ runtime (ไม่ได้ทำตอน compile)
ทดลองเขียนโปรแกรมทดสอบง่ายๆดู
public class TestRecursive {

public int run(int i) {
return run(i);
}

public static void main(String[] args) {
new TestRecursive().run(10);
}

}

ทดลอง run ใน jre ของ IBM มันจะ run ไปเรื่อยๆไม่รู้จบ
แต่ถ้าเป็นเจ้าอื่น จะเกิด Stack overflow ในพริบตา

เท่าที่ทดลองดู ยังเห็นแค่มี jre (1.4) ของ IBM เท่านั้นที่ทำได้
ของ Sun (1.5), BEA (1.4), Mac (1.5) ทำแบบนี้ไม่ได้

Related link from Roti

ผลกระทบเล็กๆของการปลด คตง.

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

Related link from Roti

Rails in Academia

ลองอ่าน comment ดูว่ามึใครเข้าใช้ทำอะไรบ้าง
Link

Related link from Roti

Codefest #2

กลับมาอีกรอบแล้ว สำหรับกิจกรรมเขียนโปรแกรม CodeFest
หลายคนมักจะเข้าใจผิดนะว่า CodeFest เป็นการแข่งขัน
จริงๆแล้วมันเป็นกิจกรรมแลกเปลี่ยนประสบการณ์
(อันนี้ไม่ตรงนิยามแบบที่ฝรั่งเขาทำเท่าไร แต่จะเป็นไรไปหล่ะ
ในเมื่อบริบทเมืองไทย มันคนละอย่างกับเขา)

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

ที่อยากคุยก็คือ อยากให้น้องๆที่เข้าร่วม
เห็นภาพที่ไกลกว่าที่เขาเคยเห็น
(เช่นครั้งที่แล้วในกลุ่มผมคนที่เคยเขียนแต่ C, php ก็ได้เห็น erlang, python, dojo)
โดยมีโจทย์ที่น่าสนใจก็คือ
ทำอย่างไร จะเปลี่ยนจากคนที่ นัยตาขุ่นทึบ เป็นนัยตาวิบวับ ได้
(อันนี้ขออธิบายหน่อย
ไม่รู้ว่าเคยสังเกตกันหรือเปล่าว่า
เวลาเราอธิบายเรื่องที่เราคิดว่ามันน่าสนใจให้กับคนที่ไม่เคยรับรู้เรื่องนั้นมาก่อน
ถ้าเราสังเกตดูที่ดวงตาของเขา เราจะเห็นว่ามันลอยๆ ขุ่นๆ ไม่มีประกาย
แต่ถ้าเมื่อไรก็ตามที่เขา get และสนุก กับเรื่องนั้น
ดวงตาก็จะเปลี่ยนเป็นมีประกายวิบวับขึ้นมาทันที)
(พฤติกรรมนี้ เข้าข่ายศัพท์ที่ mk เรียกว่า เผยแพร่ลัทธิ)

อ้ออีกข้อหนึ่งที่อยากคุยก็คือ
อยากให้ตัวเองเห็นภาพไกลกว่าที่ตัวเองคิดเช่นเดียวกัน

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

ปล.2 codefest ของเราใช้ชื่อว่า การเขียนโปรแกรมมาราธอน
ในวงการอื่นๆก็มีกิจกรรมมาราธอนแบบนี้เหมือนกัน
ลองดู SketchCrawl ซึ่งเป็นกิจกรรม drawing มาราธอน

Related link from Roti

Thursday, September 21, 2006

Breath Holding Spell

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

อยู่โรงพยาบาล ก็ไม่มีอะไรมาก นอนรับน้ำเกลือเป็นหลัก
แต่ที่ติดใจก็คือ อาการแข็งเกร็ง หยุดหายใจ นั้นเกิดจากอะไร, เรียกว่าอะไร
ผลการตรวจเลือก ค่าที่ตกนอก range ก็คือ potassium ซึ่งมีสูงกว่าปกติ
แล้วก็ co2 ซึ่งมีน้อยกว่าปกติ
สงสัยในเรื่อง co2 ก็เลยเปิดหนังสือค้นหา ก็มีอาการชักอันหนึ่งที่เรียกว่า
Hyperventilation
ที่มีอาการใจผิดรูปแบบ จน co2 ในร่างกายอยู่ในระดับต่ำ
ส่งผลให้ปริมาณ calcium ในร่างกายน้อยลง ทำให้เกิดอาการมือจีบเกร็ง

อีก 2 วันต่อมาได้คุยกับหมอว่า มีอาการแบบนี้นะ จะใช่ Hyperventilation หรือเปล่า
หมอก็บอกว่า ไม่น่าจะใช่ น่าจะเป็น Breath Holding Spell เสียมากกว่า
อ่านดูแล้ว ก็อาการตรงกับที่ลูกเราเป็น
ยกเว้นว่า ช่วงเวลาที่เขาพูดถึง เขาบอกว่าส่วนใหญ่จะเป็นประมาณ 30 วินาที
และนานสุดก็มักจะไม่เกิน 1 นาที
ส่วนลูกผมดูแล้ว น่าจะเกิด 1 นาทีนะ
แต่ไม่รู้ว่าเท่าไรแน่ เพราะเวลาที่ตกใจ เวลาในความรู้สึกเรามักจะกินเวลานานเกิดกว่าเวลาจริงเสมอ

ส่วนวิธีแก้ไข คุณหมอบอกวิธีว่า
ถ้าเกิด Breath Holding Spell แล้ว ก็ให้เราบีบที่เอ็นร้อยหวายของลูกแรงๆ
ถ้ายังไม่หายอีก ก็ให้เป่าปาก เพื่อช่วยเอาออกซิเจน เข้าไปเลี้ยงสมอง

Related link from Roti