วันจันทร์ที่ 5 ธันวาคม พ.ศ. 2554

0.88 (On-Top Payment) ละเหี่ยใจ

และแล้วก็ถึงเวลาที่จะประเมินเพื่อจ่ายเงิน On_TOP Payment กันอีกครา ปีนี้(ปีงบฯ 55) สปสช.เขาเอาข้อมูลที่เราส่ง 18 แฟ้ม(OP/PP Package) ที่ส่งไป สปสช.มาคำนวณล่ะครับ ความยุ่งเหยิงวุ่นวายเริ่มเกิดขึ้นเมื่อสถานบริการหลายแห่งเริ่มโวยวายว่าทำไมไม่ผ่านด่าน 0.88 ซึ่งเกณฑ์ 0.88 นี้ถือเป็นด่านแรกก่อนที่จะไปดูในเรื่องอื่นๆ ก็มีคำถามตามมามากมายคำถามหนึ่งที่ยอดฮิตเลยก็คือ " คีย์ยังไงจะได้ 0.88 "

เอาเป็นว่าก่อนอื่นเรามารู้ก่อนดีกว่าว่า 0.88 มัน คือค่าอะไร?

0.88 คือ เกณฑ์อัตราส่วนการใช้บริการที่หน่วยบริการปฐมภูมิเทียบกับที่โรงพยาบาลแม่ข่าย ซึ่งต้องมากกว่า 0.88 จึงจะผ่านเกณฑ์

สูตรคำนวณมีดังนี้

จำนวนครั้งผู้ป่วยนอกที่ประชากรในเขต รพ.สต. มารับบริการใน รพ.สต. / จำนวนครั้งผู้ป่วยนอกที่ประชากรในเขต สอ. ไปรับบริการใน ร.พ.แม่ข่าย

ผมยกตัวอย่างง่ายๆนะ สมมติว่า รพ.สต.A มีประชากร 100 คน นั่นหมายความว่าประชากร 88 คนต้องมารับบริการที่ รพ.สต. ( 88/100=0.88 ) 

อันนี้คิดแบบง่ายๆนะครับแต่ในความเป็นจริงแล้วในสูตรคำนวณนับเป็นครั้งนั่นหมายความว่า ประชากรคนนึงมารับบริการได้มากกว่า 1 ครั้ง 

...ว่ากันง่ายๆก็คือการจะผ่านข้อนี้ หน่วยบริการจะต้องดึงคนไข้ของตนเองเอาไว้ให้ได้มากๆ อย่าให้ไหลไป รพ.แม่ข่ายมากจนเกินไป (ไม่เกิน 12%) ทีนี้ผมคิดว่าหลายท่านคงจะได้คำตอบของเรื่องนี้แล้วนะครับว่าคำถามที่ควรจะถามจริงๆไม่ใช่ถามว่า 

"คีย์ข้อมูลอย่างไรจึงจะผ่านเกณฑ์ On-TOP 0.88"

แต่ต้องถามว่า

"จะพัฒนาการบริการอย่างไรให้ผู้ป่วยเดินมาหาเราก่อน"

ผมลองคิดเล่นๆถ้าประชากร 100 คน ก่อนจะไป รพ. เดินมาหาเราก่อน ก็จะ = 100/100 = 1.00 ผ่านแล้วครับ แต่ในความเป็นจริงก็คงมีปัจจัยอะไรต่างๆมากมายซึ่งผู้ที่จะทำให้เกิดได้ก็คือ ผู้บริหาร และ จนท.ในหน่วยบริการนั่นเอง


0.88 (ต่อ Part 2)

ที่นี้เราลองมาดูเรื่องของข้อมูลกันบ้างนะครับ ถึง 0.88 จะเกี่ยวกับการพัฒนาคุณภาพ(ความดึงดูดใจ)ของประชาชนในเขตแล้ว การคีย์ข้อมูลก็เป็นหัวใจสำคัญไม่แพ้กันนั่นก็เพราะ สปสช.จะนำเอาข้อมูล OP Package มาเป็นยอดคำนวณ OP Package นั้นผมเองก็พูดไปหลายรอบว่านิยามของมัน คือ การให้บริการผู้ป่วยนอก ไม่นับรวมพวกงาน PP เช่น การเยี่ยมบ้าน , การคัดกรองต่าง ฯลฯ ซึ่งข้อมูลที่เราคีย์ไปนั้นแน่นอนจาก 100% สปสช.ก็จะตัด Diag ที่เป็น PP ออก ยังไม่นับที่เราคีย์กัน Error ด้วยนะครับ ดังนั้นบางทีเราคีย์ทุกอย่างลงไปในโปรแกรมมันไม่ใช่ว่าจะใช้จำนวนที่เราคีย์ไปคำนวณได้ เพราะ ต้องผ่านกระบวนการตรวจสอบของ สปสช.อีกด่าน ซึ่งท่านสามารถศึกษาได้จากแนวทางของ สปสช.

http://op.nhso.go.th/opdownload/download/file/%E0%B9%81%E0%B8%99%E0%B8%A7%E0%B8%97%E0%B8%B2%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%A3%E0%B8%A7%E0%B8%88%E0%B8%AA%E0%B8%AD%E0%B8%9A%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A52555_Final_Edit12092011.pdf

และที่สำคัญขอให้ท่านส่งข้อมูลให้ตรงเวลา และหมั่นตรวจสอบข้อมูลของท่านจากหน้าเวป http://op.nhso.go.th/op/ ของ สปสช. ด้วยนะครับว่าข้อมูลของท่าน Error มากน้อยเพียงใด


ด้วยความปรารถนาดี





วันเสาร์ที่ 13 สิงหาคม พ.ศ. 2554

WM6.1 Emulator จำลองมือถือบนเครื่อง PC


ที่มา : http://pdamobiz.com
WM6.1 Emulator : ตอนที่ 1 = การติดตั้งและใช้งานเบื้องต้น
แรกเริ่มเดิมที Emulator ของ WM หรือ PPC  นั้น เป็นเครื่องมือชิ้นหนึ่งสำหรับนักพัฒนาโปรแกรม ใช้ในการทดสอบงานของตน แต่ปัจจุบัน (เท่าที่รู้ ตั้งแต่ WM5.0) ผู้ใช้งานทั่วไปสามารถติดตั้งใช้งานได้อย่างโดด ๆ โดยไม่จำเป็นต้องพึ่ง Visual Studio เพื่อใช้ในการเรียนรู้หรือทดสอบการใช้งานทั่วไป ผมมั่นใจว่าหลาย ๆ ท่าน ถ้าได้ลองแล้วจะสามารถนำไปประยุกต์ใช้ประโยชน์ได้หลากหลายด้านเลยทีเดียว
......
หมายเหตุ: บทความนี้เขียนจากการติดตั้งและทดสอบบน Windows Vista
download และ ติดตั้ง  
download ชุดติดตั้งได้จาก Windows Mobile 6.1 Emulator Images เลือกชุด Professional เลยก็ไม่เสียหาย 
แต่หากการติดตั้งพบข้อผิดพลาดด้วยข้อความว่า "Setup Wizard ended prematurely" ให้ทำการติดตั้ง Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) ก่อน แล้วจึงเริ่มทำการติดตั้ง Emulator ใหม่อีกครั้ง
เริ่มทดสอบ  
เมื่อติดตั้งเรียบร้อยจะได้ Program ขึ้นมาใหม่ ชื่อว่า Windows Mobile 6 SDK และเมื่อคลิ๊กดู (Standalone Emulator Images -> US English)
จะพบว่ามี Emulator ให้เลือกทดสอบหลากหลาย ทั้ง รุ่น Classic , Pro แล้วยังมีหน้าจอหลายทุกขนาดที่มีเครื่องผลิตมาขายจริงๆ

ทดลองเลือกที่ WM6.1 Professional ก็จะปรากฏ
จากนั้นรออีกสักครู่ (แล้วแต่ว่าเครื่องใครเร็วช้าแล้วหล่ะ) ก็จะได้ทดสอบสมใจ

(อุ้ย! เพิ่งสังเกตุ เตรียมรูปทำบทความไว้ตั้งแต่เดือนที่แล้ว เพิ่งจะได้เรียบเรียง)

ตั้งค่าเพื่อจำลองการ Sync  
การทดสอบจะสมจริงมากขึ้นเมื่อมีการ Sync ข้อมูลได้จริง ๆ และยังเพื่อประโยชน์ในการติดตั้งโปรแกรมที่จะทดสอบด้วยเช่นกัน
ที่ Windows Mobile Device Center (ถ้าเป็นบน XP ก็จะเป็น Active Sync) เลือก Mobile Device Settings -> Connection Settings แล้วเลือก DMA ตามรูป

จากนั้นไปที่ Start เมนูอีกครั้งเพื่อเลือก Windows Mobile 6 SDK -> Tools -> Device Emulator Manager จะได้

แต่หากเริ่มรัน Manager ก่อน Emulator ให้กดที่ปุ่ม Refresh บน Device Emulator Manager dialog เพื่อให้ได้ตามรูปข้างบนนี้
คลิ๊กขวาตามรูป แล้วเลือก Cradle (เป็นคำสั่งเสมือนเราเสียบสาย Sync ที่ตัวเครื่องเข้ากับ Computer ของเราเลย)
เมื่อ(เสมือน)เสียบสาย Sync แล้ว icon ที่ dialog Manager จะเปลี่ยนไปเป็น
เครื่อง(เสมือน)ของเราก็พร้อมที่จะทดสอบการ Sync ข้อมูล หรือ ติดตั้งโปรแกรมเพื่อทดสอบต่อไป (การติดตั้งโปรแกรมใช้วิธีปรกติ ภาษาไทยก็ติดตั้งได้เช่นกัน...)

ตั้งค่าจำลอง Storage Card  
ถ้าลองใช้โปรแกรม File Explorer ดูจะไม่มี Storage Card แต่เราสามารถจำลองจาก Folder หนึ่งใน Hard disk ของเรา เอามาทำเป็น Storage Card ได้
โดยที่หน้าต่าง Emulator (ขอย้ำ หน้าต่าง Emulator ไม่ใช่ Manager) เลือก File -> Configure... จะได้ dialog ดังรูป

แล้วเลือก Folder ให้ในส่วนของ "Shared Folder" คลิ๊ก OK แล้วลองกลับไปดูด้วย File Explorer อีกครั้ง ก็จะเห็น Storage Card
ดังนั้น ถ้ามีโปรแกรมใดที่ใช้การติดตั้งแบบ cap ไฟล์ ก็ไม่จำเป็นต้องใช้การ Copy file ผ่าน Sync แต่สามารถนำไฟล์ไปใส่ไว้ใน Folder นี้ได้เลย ก็จะมองเห็นและติดตั้งได้โดยตรง

ตั้งค่าเพิ่มหน่วยความจำ  
ขออีกสักหัวข้อก่อนนอน.. P535 Up RAM เป็น 128 MB ได้ Emulator ตัวนี้ก็ตั้งค่าได้ แถมตั้งได้ตามใจชอบด้วย (ไม่ต้องรบกวนหมอ IamX )
วิธิการก็คือ แก้ไข parameter ของ short cut ที่จะเรียก Emulator เช่น ถ้าต้องการแก้ของ "WM 6.1 Professional" ก็ Start -> Standalone Emulator Images -> US English -> คลิ๊กขวา ที่ "WM 6.1 Professional"
จากนั้น แก้ไขข้อความใน Tab "Shortcut" -> "Target" ส่วนของ "/memsize 128" ไปเป็น "/memsize 256" ก็จะได้เครื่อง RAM 256 สมใจ หรือถ้าใครที่เครื่องคอมมี Memory เหลือเยอะ ๆ ก็ลองใส่ไปเด็ม ๆ ดูครับ 


อ้อ.. จากรูปได้ข้อยืนยันเพิ่มเติมว่า 19202 ไม่ Fake นะครับ แถมยังเป็นตัวที่ developer ทั่วโลก ใช้ในการทดสอบโปรแกรมที่เค้าพัฒนาขั้นมาด้วยนะครับ 
ลองทดสอบด้วยโปรแกรมยอดฮิต (หรือไม่ฮิตแล้วก็ไม่รู้ )


WM6.1 Emulator : ตอนที่ 2 = Cellular Emulator การจำลองการโทร/SMS/GPRS

เมื่อตอนที่แล้ว (WM 6.1 Emulator : ตอนที่ 1 = การติดตั้งและใช้งานเบื้องต้น) เป็นการตั้งค่าเพื่อใช้ Emulator ในการทดสอบการใช้งานของ PPC ทั่วไป
ตอนนี้จะเป็นการจำลองการใช้งานที่เกี่ยวข้องการสัญญาณโทรศัพท์ด้วย Cellular Emulator  เพื่อจำลองการโทรเข้าออก การรับส่ง SMS การเชื่อมต่อ GPRS ครับ 
......
หมายเหตุ: บทความนี้เขียนจากการติดตั้งและทดสอบบน Windows Vista
ตั้งค่า WM6.1 Emulator เพื่อติดต่อกับ Cellular Emulator  
เริ่มด้วยการ Start Cellular Emulator ขึ้นมาเพื่อตรวจสอบ COM Port ที่โปรแกรมได้เลือกไว้สำหรับเครื่องท่านก่อน โดย Start ที่


สำหรับเครื่องผม โปรแกรมติดตั้งไว้กับ COM4

จากนั้นทำการแก้ไข shortcut ของ WM6.1 Emulator ที่ต้องการทดสอบ โดยเติม /U0 COM4 (เปลี่ยน COM4 เป็น COMx ที่ตรงกับเครื่องของเพื่อนๆนะครับ)

เมื่อทำการ start WM Emulator ขึ้นมาก็จะได้เครื่องที่มีสัญญาณเต็ม 

จำลองการโทรเข้าออกทั่วไป  
ต่อไปจะเป็นการโทรจาก Cellular Emulator เข้าไปที่ WM พิมพ์เบอร์โทร (จะถูกนำไปแสดงเป็นเบอร์โทรเข้าบน WM) แล้วกด Dial ดังรูป

ที่ WM ก็จะมีการโทรเข้ามาจากเบอร์ที่เราพิมพ์ ดังรูป

ต่อไปลองทดสอบโทรออกจาก WM (เบอร์อะไรก็ได้) ก็จะปรากฏมีสถานะการโทรที่ Cellular Emulator ดังรูป

หากกดปุ่มวางสายที่ WM ก็จะเป็นการยุติที่ WM แต่ถ้าต้องการจะให้ยุติที่ Cellular Emulator ให้กดที่รายการที่ได้ แล้วคลิ๊ก Drop Call ดังรูป

จำลองการโทรออกแบบมีอุปสรรค  
หากเราทำการโทรจาก WM ออกไปยังหมายเลขดังรูป ก็จะพบกับสถานการณ์ต่าง ๆ เช่น สายไม่ว่าง (Busy), ปฏิเสธสายเรา (Reject), วางหูหลังจากรับสาย (Hang Up After Connect) และ ไม่รับสายเรา (No Answer)

การจำลองเครือข่าย 2G/3G  
เลือกที่ Tab Network จะมีปุ่ม Network Selection 2G / 3G ให้เลือกจำลอง

จะได้สัญลักษณ์เครือข่าย 3G ดังรูป


จำลองการรับส่ง SMS  


เลือกที่ Tab SMS แล้วส่ง SMS เข้าออก ด้วยหลักการเดียวกับการจำลองการโทรเข้าออกที่อธิบายไว้ข้างต้น


จำลองเชื่อมต่อ Internet ด้วย GPRS  
การจำลองนี้ต้องการตั้งค่า Connections ที่ WM เสมือนการตั้งค่า Connection GPRS จริง ๆ ในเครื่อง โดยตั้งค่าดังนี้ที่ WM ไปที่ Settings -> Connections -> My ISP -> Add a new modem connection -> Select a modem เลือก Cellular Line (GPRS) -> Access point name ปล่อยว่างแล้วเลือก Finish เพียงเท่านี้เราก็สามารถเชื่อมต่อ Internet ผ่าน GPRS ได้แล้วครับ (แต่เครื่องคอมพิวเตอร์ต้องเชื่อมต่อ Internet อยู่ก่อนนะครับ)

วันจันทร์ที่ 18 กรกฎาคม พ.ศ. 2554

วิธีการคำนวณพลังงานเพื่อลดน้ำหนัก

หลักการ คือ 
1. เราต้องทราบก่อนว่าเราต้องการพลังงานต่อวันเท่าไหร่?
2. ในการลดน้ำหนักเราควรลดพลังงานที่ได้รับไม่เกิน 20% (10% ก็เก่งแล้วครับ)
3. การลดน้ำหนักสามารถทำได้ 2 แบบ คือ รับประทานให้น้อยลง หรือ รับประทานเท่าเดิมแต่ออกกำลังกายให้ใช้พลังงานออกไป โดยหลัก คือ ทำอย่างไรก็ได้ให้ร่างกายได้รับพลังงาน/วัน เท่ากับค่าที่คำนวณได้ 
4. ต้องอดทนต่อความอยากอาหาร เนื่องจากเราบริโภคจนร่างกายเคยชินเมื่อลดอาหารลงร่างกายจะโหยหาอาหารเพื่อเติมให้เท่ากับพลังงานที่ร่างกายเคยได้รับ เมื่อเวลาผ่านไปพอร่างกายเคยชินเราก็จะไม่รู้สึกอยากอีก


" ขอเป็นกำลังใจให้กับท่านผู้ที่จะลดน้ำหนักนะครับ ลดน้ำหนัก ลดโรค ลดค่าใช้จ่าย "


วิธีในการคำนวณพลังงานที่ร่างกายต้องการ

วิธีคิดอย่างเร็ว ๆ สุดคือ นำแคลอรี่ที่คุณต้องการไปคูณกับน้ำหนักตัวของคุณ

ถ้าคุณต้องการลดน้ำหนัก แคลอรี่ที่คุณต้องการ = 24 -26

ถ้าคุณต้องการให้น้ำหนักคงที่ แคลอรี่ที่คุณต้องการ = 30 -32

ถ้าคุณต้องการให้น้ำหนักเพิ่ม แคลอรี่ที่คุณต้องการ = 36 -40

(แต่วิธีนี้เป็นวิธีคิดอย่างหยาบ อาจไม่ถูกต้องเสียทีเดียว และอีกอย่างก็คือวิธีนี้ไม่ได้ใช้ระดับของกิจกรรมมาคำนวณด้วย)

แนะนำให้ใช้อีกสูตรดีกว่าเป็นสูตรของ Harris Benedict ซึ่งใช้น้ำหนัก ส่วนส่วน อายุ และเพศในการคำนวณ ความต้องการพลังงานขั้นพื้นฐาน
วิธีนี้จะมีความแม่นยำกว่าวิธีแรกซึ่งใช้แค่เพียงน้ำหนักอย่างเดียว

ชาย ความต้องการพลังงานพื้นฐาน = 66 + (13.7x น้ำหนัก) + ( 5 x ความสูง) + (6.8 x อายุ)

หญิง ความต้องการพลังงานพื้นฐาน = 66 + (13.7x น้ำหนัก) + ( 5 x ความสูง) + (6.8 x อายุ)

(น้ำหนักมีหน่วยเป็นกิโลกรัม ส่วนสูงมีหน่วยเป็นเซนติเมตร อายุมีหน่วยเป็นปี)

ตัวอย่าง

ถ้าคุณเป็นผู้หญิงที่มีอายุ 45 ปี สูง 170 น้ำหนัก 78 กิโลกรัม

ดังนั้นความต้องการพลังงานพื้นฐานคือ

ความต้องการพลังงานพื้นฐาน = 655 + (9.6 x 78) + (1.8 x 170) + (4.7 x 45)
= 655 + 748.8 + 306 + 211.5

= 1931.3 แคลอรี่ต่อวัน

ตัวอย่าง

ถ้าคุณเป็นผู้ชายที่มีอายุ 45 ปี สูง 170 น้ำหนัก 78 กิโลกรัม

ดังนั้นความต้องการพลังงานพื้นฐานคือ

ความต้องการพลังงานพื้นฐาน = 66 + (13.76 x 78) + (5 x 170) + (6.8 x 45)= 66 + 1068.6 + 850 + 306
= 2290.6 แคลอรี่ต่อวัน

สูตรนี้เป็นแค่เพียงการคำนวณแคลอรี่พื้นฐานเท่านั้น หมายถึงความต้องการพลังงานในการทำงานของอวัยวะต่าง ๆ

ในร่างกาย เรายังต้องคูณระดับกิจกรรมเข้าไปด้วย เช่น

ทำงานบนโต๊ะ ไม่เคยออกกำลังกายเลย ระดับกิจกรรม 1.2

ทำงานออกกำลังกายเบา ๆ ( 1-3 วันต่อสัปดาห์) ระดับกิจกรรม 1.375

ทำงานออกกำลังกายปานกลาง ( 3-5 วันต่อสัปดาห์) ระดับกิจกรรม 1.55

ทำงานออกกำลังกายค่อนข้างหนัก ( 6-7 วันต่อสัปดาห์) ระดับกิจกรรม 1.725

ทำงานออกกำลังกายหนัก ( 2 ครั้งต่อวันขึ้นไป วิ่งมาราธอน) ระดับกิจกรรม 1.9

ดังนั้นพลังงานที่เราต้องการคือ (สมมุติว่าเราออกกำลังกาย 3 วันต่อสัปดาห์)
ผู้หญิง = 1931.3 x 1.55 = 2993.521 แคลอรี่

ผู้ชาย = 2290.2 x 1.55 = 3550.43 แคลอรี่

พอเรารู้พลังงานที่ต้องการต่อวันแล้ว ทีนี้เราก็ปรับพลังงานให้เข้ากับเป้าหมายของเราค่ะ (ส่วนใหญ่เค้าให้ลดพลังงานให้น้อยกว่าที่ร่างกายต้องการ 20 % )

สมมุติน้ำหนัก 78 กิโลกรัม

ความต้องการพลังงานคือ 2993.5 แคลอรี่

ต้องการสร้างส่วนต่างของพลังงาน 500 แคลอรี่ต่อวัน

ดังนั้นพลังงานที่เราจะได้รับจากอาหารเพื่อต้องการลดน้ำหนัก 2993.5-500 = 2493.5

วิธีคิด 20 %

คุณต้องการสร้างส่วนต่างพลังงาน 20 % (20 % * 2993.5 ) จะเท่ากับ 598.7

พลังงานที่เราจะต้องรับจากสารอาหารเท่ากับ 2993.5-598.7 = 2394.8

วันเสาร์ที่ 16 กรกฎาคม พ.ศ. 2554

เขียนโค้ด ส่ง SMS เข้ามือถือ แบบฟรีๆ

ทริปนี้ เราจะแอบเอาความสามารถของ google calendar มาใช้ หลายท่านคงทราบอยู่แล้วว่า google calendar นั้น มีฟังก์ชั่นเตือนเหตุการณ์ล่วงหน้า  ด้วย SMS และมี API ให้เราใช้  เราจะใช้ช่องตรงนี้แหละครับ  มาทำให้โปรแกรมเราส่ง SMS หาเราเมื่อมีคอมเม้นท์ใหม่ หรือว่ามีเหตุการณ์อันใดเกิดขึ้น สักอย่างกับเว็บเรา ลองดูโมเดล คร่าวๆ

send SMS model

1.ต้องมีแอคเค้าของ google และ เซต SMS


สำหรับใช้ google calendar และต้องตั้งให้ google calendar ส่ง SMS หาเราได้ ผมคงจะไม่กล่าวขั้นตอนนี้เอง เพราะมีท่านอื่นๆ ได้เขียนไว้ละเอียดแล้ว สามารถอ่านได้ที่
http://www.9tana.com/node/google-calendar/ หรือที่นี่ http://gotoknow.org/blog/krunapon/118353 ย้ำนะครับว่าต้องเซ็ตขั้นตอนนี้ให้เรียบร้อย สำหรับบางเครือข่ายโทรศัพท์ ไม่สามารถใช้คุณสมบัตินี้ได้ เพราะ google calendar ยังไม่ซัพพอร์ต ก็ต้องแสดงคำว่า เสียใจด้วย แต่ถ้าอยากจะทดสอบ ทดลอง เอาโดเรม่อนไปแลกซิม ทรูมูฟ จากเซเว่นมาสักซิม ก็ได้ครับ


2.ดาวน์โหลด Zend Gdata

ไลบรารี่นี้ทำให้เราเขียนติดต่อกับ google calendar ได้ ง่ายและสะดวก


3.แตกซิป Zend Gdata

ในโฟลเดอร์ ZendGdata-1.7.2 จะมีทั้ง document และโค้ดตัวอย่างมากมาย  แต่สิ่งที่เราต้องใช้คือสิ่งที่อยู่ในโฟลเดอร์ ZendGdata-1.7.2libraryZend ก้อปปี้มาใช้ทั้งโฟลเดอร์ Zend เลยนะครับ


4.สร้างฟังก์ชั่นสำหรับติดต่อกับ google calendar

มันก็คือฟังก์ชั่นที่ใช้เพิ่มรายการ เข้าไปใน google calendar และตั้งเวลาให้ส่ง SMS หาเรา โดยในฟังก์ชั่นนี้ผม ให้ใส่รายการไป ณ.เวลาปัจจุบัน+3 นาที และให้แจ้งเตือนก่อนถึงรายการนี้ 2 นาที เพราะฉะนั้นเมื่อ + – แล้ว หลังสคริปเรารันจบ ประมาณ 1 นาที จะต้องมี SMS หาเรา
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
function send_sms( $param_google_username , $param_google_password,$param_title,$param_content ){
 
 /**
  * @Include Zend_Loader
  */
 require_once 'Zend/Loader.php';
 
 /**
  * @Load Zend_Gdata
  */
 Zend_Loader::loadClass('Zend_Gdata');
 
 /**
  * @Load Zend_Gdata_AuthSub
  */
 Zend_Loader::loadClass('Zend_Gdata_AuthSub');
 
 /**
  * @Load Zend_Gdata_ClientLogin
  */
 Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
 
 /**
  * @Load Zend_Gdata_HttpClient
  */
 Zend_Loader::loadClass('Zend_Gdata_HttpClient');
 
 /**
  * @Load Zend_Gdata_Calendar
  */
 Zend_Loader::loadClass('Zend_Gdata_Calendar');
 
 // Parameters for ClientAuth authentication
 $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
 $user = $param_google_username ;
 $pass =$param_google_password ;
 
 // Create an authenticated HTTP client
 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
 
 // Create an instance of the Calendar service
 $service = new Zend_Gdata_Calendar($client);
 
 // Create a new entry using the calendar service's magic factory method
 $event= $service->newEventEntry();
 
 // Populate the event with the desired information
 // Note that each attribute is crated as an instance of a matching class
 $event->title = $service->newTitle( $param_title );
 
 //$event->where = array($service->newWhere("Mountain View, California"));
 $event->content = $service->newContent( $param_content );
 
 // Set the date using RFC 3339 format.
 $startDate = date( "Y-m-d" );//"2009-01-15";
 $startTime = date( "H:i" , strtotime("+3 minutes") );
 $endDate = date( "Y-m-d" );
 $endTime = date( "H:i" , strtotime("+6 minutes") );
 $tzOffset = "+07";
 
 $when = $service->newWhen();
 $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
 $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
 
 // Create a new reminder object. It should be set to send an email
 // to the user 10 minutes beforehand.
 $reminder = $service->newReminder();
 $reminder->method = "sms";
 $reminder->minutes = "2";
 
 $when->reminders = array($reminder);
 
 $event->when = array($when);
 
 // Upload the event to the calendar server
 // A copy of the event as it is recorded on the server is returned
 if ($newEvent = $service->insertEvent($event)){
 
  return true ;
 }else{
 
  return false;
 }
 
}?>

ฟังก์ชั่นนี้ผมส่งพารามิเตอร์เข้าไป 5 ตัว เขียนไว้เป็นฟังก์ชั่นเวลาเรียกใช้งานจะได้สะดวก
$param_google_username – username ที่ใช้ล้อกอินเข้ากูเกิล
$param_google_password – password ที่ใช้ล้อกอินเข้ากูเกิล
$param_title – หัวข้อรายการ
$param_content – เนื้อหาที่เราจะให้ส่ง sms หาเรา


5.ส่ง SMS

87
88
89
90
91
92
93
94
95
<?php
$google_username = "xxxxxxxxxxx"; // username เข้ากูเกิลของคุณ
$google_password = "xxxxxxxxxxx"; // password เข้ากูเกิลของคุณ
$title = "เรื่องนี้ต้องขยาย";
$content = "เนื่องจากนางสมศรีแอบรักกับนายสมชาย โดยพ่อสมปองไม่ทราบ"; 
 
// ส่ง SMS
send_sms( $google_username , $google_password , $title ,$content );
?>

6.Final โค้ดทั้งหมด จะเป็นดังนี้

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
function send_sms( $param_google_username , $param_google_password,$param_title,$param_content ){
 
 /**
  * @Include Zend_Loader
  */
 require_once 'Zend/Loader.php';
 
 /**
  * @Load Zend_Gdata
  */
 Zend_Loader::loadClass('Zend_Gdata');
 
 /**
  * @Load Zend_Gdata_AuthSub
  */
 Zend_Loader::loadClass('Zend_Gdata_AuthSub');
 
 /**
  * @Load Zend_Gdata_ClientLogin
  */
 Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
 
 /**
  * @Load Zend_Gdata_HttpClient
  */
 Zend_Loader::loadClass('Zend_Gdata_HttpClient');
 
 /**
  * @Load Zend_Gdata_Calendar
  */
 Zend_Loader::loadClass('Zend_Gdata_Calendar');
 
 // Parameters for ClientAuth authentication
 $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
 $user = $param_google_username ;
 $pass =$param_google_password ;
 
 // Create an authenticated HTTP client
 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
 
 // Create an instance of the Calendar service
 $service = new Zend_Gdata_Calendar($client);
 
 // Create a new entry using the calendar service's magic factory method
 $event= $service->newEventEntry();
 
 // Populate the event with the desired information
 // Note that each attribute is crated as an instance of a matching class
 $event->title = $service->newTitle( $param_title );
 
 //$event->where = array($service->newWhere("Mountain View, California"));
 $event->content = $service->newContent( $param_content );
 
 // Set the date using RFC 3339 format.
 $startDate = date( "Y-m-d" );//"2009-01-15";
 $startTime = date( "H:i" , strtotime("+3 minutes") );
 $endDate = date( "Y-m-d" );
 $endTime = date( "H:i" , strtotime("+6 minutes") );
 $tzOffset = "+07";
 
 $when = $service->newWhen();
 $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
 $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
 
 // Create a new reminder object. It should be set to send an email
 // to the user 10 minutes beforehand.
 $reminder = $service->newReminder();
 $reminder->method = "sms";
 $reminder->minutes = "2";
 
 $when->reminders = array($reminder);
 
 $event->when = array($when);
 
 // Upload the event to the calendar server
 // A copy of the event as it is recorded on the server is returned
 if ($newEvent = $service->insertEvent($event)){
 
  return true ;
 }else{
 
  return false;
 }
 
}
 
$google_username = "xxxxxxxxxxx"; // username เข้ากูเกิลของคุณ
$google_password = "xxxxxxxxxxx"; // password เข้ากูเกิลของคุณ
$title = "เรื่องนี้ต้องขยาย";
$content = "เนื่องจากนางสมศรีแอบรักกับนายสมชาย โดยพ่อสมปองไม่ทราบ"; 
 
// ส่ง SMS
send_sms( $google_username , $google_password , $title ,$content );
 
?>

ส่งท้าย

ความสำคัญทั้งหมดจะอยู่ที่ ฟังก์ชั่น send_sms ถ้าคุณจะทดสอบโค้ดชุดนี้ในเครื่องของคุณ ต้องมั่นใจนะครับว่า คุณได้เปิด OpenSSL ใน php.ini ไว้เรียบร้อย

โค้ดชุดนี้สามารถเอาไปประยุกต์ เป็นระบบส่ง SMS ภายในองค์กร หรือในกลุ่มเพื่อน สาเหตุที่บอกว่าประยุกต์ใช้เป็นกลุ่มอย่างนี้ เพราะว่าคุณต้องรู้ username กับ password google ของเขา จึงสามารถไปสร้างรายการแจ้งล่วงหน้าด้วย SMS ใน google calendar ของเขาได้

**** ย้ำเตือนนะครับ ****
  1. ต้องใช้ UTF-8 เท่านั้น
  2. ส่วนเรื่องเวลา จะขึ้นอยู่กับว่าโฮสต์ของท่านตั้งอยู่ประเทศไหน ถ้าไม่ได้อยู่ในไทย ก็แก้ตรงนี้ $tzOffset = “+07″;