Skip to content

Kor's blog Posts

เขียน script เพื่อ ping process บน Linux

ส่วนหนึ่งของงานที่ทำอยู่ของผมมีโปรแกรมที่ต้องรันเอาไว้ตลอดเวลาเขียนด้วย Java รันเป็น executable jar แต่มีปัญหาคือเกิด exception และตายบ่อยต้องคอย start เองอยู่เรื่อยๆ

โจทย์ของผมคือโปรแกรมที่คอยตรวจว่าโปรแกรมต้องการยังรันอยู่หรือเปล่าถ้าไม่ได้รันอยู่ก็ start ขึ้นมา ผมเลยเขียน script เล็กๆ เพื่อทำงานตรงนี้จะได้ไม่ต้องมา monitor เอง

งานแค่นี้จริงๆ จบได้ด้วย shell script แต่ผมเขียนไม่คล่องเลยใช้ Python แทนได้โค้ดประมาณนี้

คำแนะนำก่อนไปเที่ยวภูกระดึง

ผมเพิ่งไปเที่ยวภูกระดึงมาช่วงวันที่ 3-6 พฤศจิกายน 2555 ที่ผ่านมา หลายคนว่ามีแต่คนบ้าเท่านั้นแหละที่ไปภูกระดึงมากกว่า 2 ครั้ง ใช่ครับผมบ้าและบ้าหนักเพราะครั้งนี้เป็นครั้งที่ 6 แล้ว

สำหรับคนที่วางแผนจะไปเที่ยวผมมีคำแนะนำและการเตรียมตัวดังนี้

เลือกช่วงการท่องเที่ยวก่อน

เลือกเป้าหมายก่อนว่าคุณอยากไปเที่ยวแบบนี้เพราะช่วงเดือนแต่ละเดือนบนภูกระดึงมีสภาพแตกต่างกันสรุปคร่าวๆ ได้ 3 ช่วงคือ

  1. ช่วงเที่ยวน้ำตก ควรไปช่วงเดือนตุลาคมที่ทางอุทยานเปิดให้ขึ้นไปได้ ช่วงนี้ยังมีฝนอยู่น้ำตกจะมีน้ำเยอะ อากาศจะชื้น ตะไคร่น้ำเกาะก้อนหินเขียว ขอนไม้เขียวๆ สวยดี
  2. ช่วงใบเมลเปิ้ลสีแดง ช่วงที่ใบเมเปิ้ลแดงเต็มต้นมักจะเป็นกลางเดือนธันวาคม พฤศจิกายนเขียวอยู่ๆ ส่วนปลายเดือนธันวาคมจะเริ่มร่วงๆ แล้ว ถ้าอยากถ่ายรูปใบเมเเปิ้ลไปช่วงนี้กำลังเหมาะ
  3. ช่วงอากาศหนาวและทะเลหมอก ถ้าอยากไปสัมผัสอากาศหนาวมากๆ แนะนำให้ไปเดือนปลายเดือนธันวาคม ในปีที่หนาวมากอาจมีโอกาสได้เห็นแม่คะนิ้งหรือน้ำค้างแข็งตามยอดต้นไม้ใบหญ้า โชคไม่ดีผมยังไม่มีโอกาสได้เห็น

หัดใช้ Mustache กันดีกว่า

Mustache คืออะไร?

Mustache เป็น template engine (บางทีก็เรียก render engine) ตัวหนึ่งในเว็บโครงการเขานิยาม lib ตัวนี้ว่า

Logic-less templates.

Mustache รองรับภาษาอื่นๆ เยอะมาก เช่น RubyJavaScriptPython,ErlangPHPPerlObjective-CJava.NET,AndroidC++GoLuaoocActionScript,ColdFusionScalaClojureFantom,CoffeeScriptD, และ node.js

หน้าที่ของมันคือ generate markup  (ถ้าเป็น web app ก็ HTML) ซึ่งเป็นส่วนหน้าของ app จาก data model (JSON) ที่เราออกแบบไว้ จะว่าไปมันก็เป็นเครื่องมือที่เกิดจากแนวคิด MVC ที่พยายามแยกการทำงานของโปรแกรมหรือ application ออกเป็นส่วนตามการทำงาน

รวมรายชื่อ PaaS ที่ใช้ได้ฟรี

คำเตือน: เนื่องจากผมเขียนไว้นานแล้ว PaaS บางที่อาจจะปิดให้บริการ, เปลี่ยนชื่อ, เปลี่ยน feature, เปลี่ยนเงื่อนไขการบริการ หรือมีการเก็บค่าบริการแล้ว เข้าไปอ่านเงื่อนไขในเว็บดีกว่าครับ

รวมรายชื่อ PaaS (Platform as a service) ที่ให้ใช้ได้ฟรีแต่ถ้าอยากได้ฟีเจอร์เพิ่มหรือปริมาณการใช้งานมากขึ้นต้องจ่ายเงินเพิ่ม (ของมันแน่อยู่แล้ว) ในรายละเอียดคงต้องลองใช้ดูเองครับ ผมรวบรวมมายังไม่ได้ลองทุกตัว

ทำไมต้อง Websocket ?

ทำไมต้อง Websocket ? ก่อนหาคำตอบของคำถามนี้คงต้องเล่าย้อนกลับไปถึงวิวัฒนาการของเว็บก่อน ถ้านับแล้วน่าจะมี 3 ยุค (ผมเดาเอง) คือ

  1. Static web เว็บยุคแรกๆ ยังทำอะไรไม่ได้มากนอกจากแสดงข้อมูลสร้างด้วย HTML, CSS เป็นหน้าๆ มีแต่ markup อย่างเดียว ผู้ใช้เข้ามาอ่านได้อย่างเดียวไม่มี interactive ระหว่าง client และ server
  2. Dynamic web มีภาษาโปรแกรมเข้ามาเกี่ยวข้องแรกๆ เป็น Javascript  ทำงานฝั่ง client ต่อมามีการใช้ CGI พวก Perl, PHP เขียนโปรแกรมทำงานฝั่ง server ด้วยทำให้มีการ interactive ระหว่าง client กับ server
  3. Real-time web ถ้าใช้การ interactive ระหว่าง client-server มันน่าจะอยู่กลุ่มเดียวกันกับข้อ 2 แต่ต่างกันนิดนึงคือมีการรับ-ส่งข้อมูลกันตลอดเวลาถ้า server มีการ PUSH ข้อมูลมาที่ client ก็จะแสดงผลทันทีไม่ต้อง request ไปที่ server ใหม่ การ request ไปที่ server ใหม่เช่นการ refresh หน้าเว็บต้อง request ข้อมูลที่ server ใหม่ทั้งหมดทำให้เกิด overhead ในการรับ-ส่งข้อมูล ถ้ายังนึกไม่ออกให้คิดถึงเฟซบุ๊กที่เวลาเพื่อนคอมเม้นต์ แล้วจะมีแจ้งเตือนเราเกือบจะทันที หรือ inbox ในหน้าเว็บ Gmail เวลามีอีเมลเข้าก็จะแจ้งเตือน unread เกือบจะทันทีเหมือนกัน

คำแนะนำการพัฒนา real-time app ด้วย Node.js และ Socket.io

ผมใช้ Node.js ร่วมกับ Socket.io มาได้ซักพักแล้ว เอาไปใช้ในแลปเล็กๆ ส่วนตัวของผมเองและเอาไปใช้จริงในงานที่ทำด้วย ก็พอเห็นปัญหาการในพัฒนาพอสมควรขอสรุปปัญหาและวิธีแก้ของผมดังนี้ครับ

1. สไตล์การเขียนโปรแกรมแบบ Asynchronous

Node.js มันคือ Javascript ถ้าคุ้นเคยมาก่อนจะดีมาก การเขียนโดยทั่วไปเขียนเหมือน procedural programming ทำงานจากบนลงล่างแต่ก็มีส่วนที่เป็น asynchronous API ของภาษามีการใช้ callback function เยอะมาก

ด้วยความที่ Node.js เป็น event-driven หรือ event-based รันด้วย thread เดียว เพื่อให้รองรับการทำงานพร้อมกันและลด overhead ระหว่าง thread การทำงานของโปรแกรมจะเป็นแบบ asynchronous หมายความว่า I/O จะไม่ถูกบล็อคการทำงาน ตัวอย่างเช่น การใช้งาน AJAX เมื่อเริ่มทำงานก็จะ request ข้อมูลออกไประหว่างที่รอ response ตอบกลับมาคำสั่งบรรทัดข้างล่างก็จะงานของมันไป (ถ้าทำเป็นแบบ sync ต้องรอให้มี response ตอบกลับมาก่อนจึงจะทำคำสั่งต่อไปได้) เมื่อมีการ response ข้อมูลกลับมาก็จะมีการส่ง event บอกว่าการตอบกลับมาแล้ว ซึ่ง event ตรงนี้เราสามารถเขียนโค้ดเพื่อจับ event แล้วนำข้อมูลไปประมวลผลต่อ เช่น เอาไปแสดงผลหน้าเว็บต่อได้

ปัญหาที่พบในการเขียน asynchronous programming คือการคุม control flow และ scope ของตัวแปรเพราะมีการใช้ callback function เยอะมาก บางครั้งต้องเขียน callback function ซ้อนกันหลายชั้นทำให้เกิดปัญหาที่เรียกว่า “callback pyramid”

Node.js มี lib สำหรับเขียน control flow ของโปรแกรมหลายตัวส่วนตัวผมใช้ Async เพราะครอบคลุมการทำงานหลายรูปแบบ ใช้ง่ายและ document ค่อนข้างดี คนใช้เยอะตัวอย่างเยอะด้วยอันนี้แนะนำครับ