Category Archive: Computer Science

Refactoring to better use of polymorphism

Refactoring to better use of polymorphism

What is polymorphism? นึกย้อนกลับไปเมื่อประมาณวันอังคารที่แล้ว ในการสอบสัมภาษณ์ committee ถามว่า “polymophism คืออะไร?” กับเด็กจบใหม่ที่มาสมัครงานคนหนึ่ง (คำถามคลาสสิค) – คำตอบที่ได้กลับมาคือ “มันคือ method overloading ครับ/ค่ะ” ใช่ครับ อาจารย์พี่ก็สอนมาแบบนี้… ผมว่าคำถามนี้มันกึ่งๆ open-ended question คือคำตอบมันขึ้นกับความเข้าใจที่มีใน OO บวกประสบการณ์การเขียนจริง – มันคงไม่ถึงกับผิด ถ้าคุณ ไม่ตอบออกทะเล ที่สำคัญคือคุณตอบ “ครบ” แค่ไหน? Polymorphism is all around Method Overloading เป็นส่วนหนึ่งของคอนเซ็ปต์ polymorphism แต่มันไม่ใช่ทั้งหมดของ polymorphism อันนี้ต้องพูดให้เคลียร์นิดนึง – ตามความเข้าใจของผม Polymorphism มีหลายประเภทด้วยกัน ad-hoc polymorphism: คือการใช้ inheritance + method overloading + dynamic binding โดยให้ compiler/interpreter เป็นผู้เลือกว่าจะ เรียกการกระทำจาก object [...]

 

Papers – born for academic researcher

Papers – born for academic researcher

ดองบล็อกไว้พักใหญ่ๆกำลังเค็มได้ที่ วันนี้ได้ฤกษ์มาโพสเรื่องโปรแกรมโปรดของผมดีกว่า จากที่เคยเขียนไว้ครั้งที่แล้วเรื่อง academic search engine – การหาเปเปอร์จะว่ายากก็ไม่ยากเท่าไหร่ แต่ปัญหาที่ผมเจอเป็นประจำคือ โหลด -> อ่านแบบ skimming -> ซุกไว้ซักโฟลเดอร์ พอผ่านไปซักพักก็หาไม่เจอแล้ว ต้องโหลดมาใหม่ ซ้ำร้าย จำไม่ได้ซะอีกว่าชื่อเปเปอร์อะไร? ใครเขียน? ปัญหาใหญ่อีกอย่างคือ เวลามีเปเปอร์เยอะๆแล้วต้องการเปรียบเทียบ เช่นที่มาจากคนเขียนคนเดียวกัน, เรียงตามปี, เรียงตามจำนวนครั้งที่ถูก cited – แทบจะเป็นไปไม่ได้ ต้องนั่งไล่เปิดทีละไฟล์หรือใส่ folder เรียงตามปี – สุดท้ายก็ลำบากอยู่ดี อยู่ในวงการการศึกษานี่มันปวดตับจริงๆ ขอบอก -*- เหมือนฟ้าประทานให้เราสองมาเจอกัน… Papers เป็น app บน OS X ที่เกิดมาเพื่อคนสายวิจัยโดยแท้ ลักษณะ UI เหมือน iTune แถม search feature มาในตัว เรียกว่า หา -> อ่าน -> จัดลำดับ/ใส่ tag [...]

 

Chaos Model

Chaos Model

มีนักวิทยาศาสตร์ท่านหนึ่งเสนอ Software Development Process ชื่อว่า Chaos Model – เนื้อหาย่อๆมีดังนี้ การพัฒนา software project ขึ้นมาซักโครงการ มีวิธีพัฒนาให้เลือกใช้มากมายหลายสกุล ทั้งแบบศักดินาอย่าง waterfall แบบโมเดิร์นอย่าง iterative หรือ agile ไปจนกระทั่งวัยรุ่นอย่าง extreme programming แต่กระบวนการทั้งหลายแหล่ให้ความสนใจกับ “ขั้นตอนการทำงาน” ว่าควรจัดลำดับความสำคัญทำอะไรก่อนหลัง (Design, Code, Integration, Test) “ความต่อเนื่องของการทำงาน” เช่น waterfall ทำเป็นขั้นๆไป ทำให้เกิดปัญหาคอขวด พวกกระบวนการที่ตามมาหลังๆก็ปรับให้ทำงานได้ smooth ขึ้น โดยซอยขั้นตอนการทำงานให้เล็กลง พอดีคำ – ทำให้สามารถทำแบบขนานได้ (parallel) เป็นกลุ่มๆ “ผลลัพธ์ของแต่ละกระบวนการทำงาน” เช่นชิ้นงาน (workproduct) ที่จะออกมาในแต่ละขั้น กระบวนการเหล่านี้ตั้งสมมุติฐานว่าการพัฒนา software เป็น “ศาสตร์” มากกว่า “ศิลป์” ซึ่งต่างพยายามเข้ามา “ควบคุม” เพื่อลดความเสี่ยงของโครงการ คงไม่มี project manager คนไหนอยากทำงานกับโปรแกรมเมอร์อ๊าตตัวพ่อ [...]

 

Create Academic Log with TiddlyWiki

Create Academic Log with TiddlyWiki

ข้อดีของการเป็นนักศึกษาคือมีโฮสต์ให้ใช้ฟรี (จริงๆไม่ฟรี เหมาจ่ายในค่าลงทะเบียนไปแล้ว) สมัยเรียนป.ตรี ที่บางมด มี server ให้นศ.เข้ามาลองใช้ระบบปฎิบัติการอื่นที่ไม่ใช่ windows (รู้สึกว่าจะเป็น SunOS หรือ Solaris นี่แหละ) แต่ส่วนใหญ่จะแปรสภาพมาเป็นที่เก็บไฟล์เถื่อนและหนังผู้ใหญ่ซะเกือบหมด (สมัยนั้น bittorrent ยังไม่บูม) ไหนๆก็มีที่ให้เล่น จะปล่อยว่างก็เสียดาย จะเก็บหนังเหมือนเดิมก็ใช่ที่ (server นี้คนดูแลเขา active เด๋วโดนเด้ง) เลยแปรสภาพอสังหาริมทรัพย์ให้เป็นทุน ด้วยการลง TiddlyWiki ซะเลย TiddlyWiki เป็น Wiki มหัศจรรย์ เนื่องจากมันไม่ใช้ server-side script ไม่ง้อ database – ที่สำคัญ มันประกอบด้วย html ไฟล์เดียวเพียวๆ บร๊ะเจ้า! แล้วเอาเจ้าทิดนี่ไปทำอะไร? ขึ้นอยู่กับจินตนาการของผู้ใช้แล้วล่ะ Personal Knowledge Based – เก็บลิ้งโน่นนี่ จดบันทึก step งานที่ทำเป็นประจำทุกวัน ฯลฯ GTD (Getting Thing Done) – [...]

 

รีวิว Academic Search Engines

รีวิว Academic Search Engines

ช่วงนี้คลุกคลีอยู่กับ paper, journal ปุจฉา: จะหา research paper จากที่ไหน? วิสัชนา: ถ้าไม่อยากขออาจารย์ ก็หาเองได้ตามที่ต่อไปนี้