วันพฤหัสบดีที่ 12 พฤศจิกายน พ.ศ. 2558

สิ้นสุดการประมูล คลื่นความถี่ 1800 MHz

  สิ้นสุดไปแล้วนะครับสำหรับการประมูลคลื่นความถี่ 1800 MHz สำหรับผู้ทีชนะการประมูลก็เป็นไปตามคาดการณ์นะครับ 
  • สล็อต 1 (1710 – 1725 / 1805 – 1820MHz) บริษัท ทรูมูฟ เอช ยูนิเวอร์แซล คอมมูนิเคชัน จำกัด เสนอราคา 39,792 ล้านบาท
  • สล็อต 2 (1725 – 1740 / 1820 – 1835MHz) บริษัท แอดวานซ์ ไวร์เลส เน็ทเวอร์ค จำกัด เสนอราคา 40,986 ล้านบาท
  • ราคารวมทั้งสิ้น 80,778 ล้านบาท
นั้นก็คือ ค่ายมือถือยักษ์ใหญ่อย่าง AIS และ Ture ต่อไปผมจะสรุป สัญญาของแต่ละค่ายกันนะครับ ว่าค่ายไหนถือใบอนุญาตถึงปีไหนกันบ้างครับ งานนี้มีผู้ประมูลยักษ์ใหญ่ 4 ค่ายได้แก่

  1.AIS
  2.DTAC
  3.JAS
  4.TURE

AIS
1800 15MHz ใบอนุญาต หมดอายุปี 76
2100 15MHz ใบอนุญาต หมดอายุปี 70
DTAC
850 10 MHz สัมปทาน หมดอายุปี 61
1800 25 MHz สัมปทาน หมดอายุปี 61 (เดิม 50MHz แต่คืน 5MHz ไปประมูล / 20 MHz CAT ขอเอาไปดูแล ?)
2100 15 MHz ใบอนุญาต หมดอายุปี 70
TRUE
1800 15 MHz ใบอนุญาต หมดอายุปี 76
2100 15 MHz ใบอนุญาต หมดอายุปี 70
CAT
850 15 MHz เจ้าของคลื่น หมดอายุปี 68 --> MVNO ให้กับ TRUE-H 15MHz
1800 20MHz ขอปรุงคืนทำ LTE หมดอายุปี 61
TOT
2100 15MHz ฟรี หมดอายุ 68
2300 60 MHz ฟรี หมดอายุ 68
MCOT
2600 70 MHz ฟรี หมดอายุปี (ไม่มีข้อมูล)
  จะเห็นได้ว่ายังไง AIS ก็ต้องประมูลคลื่นความถี่นี้ให้ได้เพราะว่าปัจจุบันมีคลื่นความถี่ 2100 อย่างเดียวและกำลังเต็มความถี่ เพื่อที่จะได้ 4G มาแข่งกับค่าย DTAC สำหรับ DTAC ส่วนตัวคิดว่าไม่ต้องการเท่าไหร่เพราะยังไงก็มีคลื่น 1800 อยู่แล้ว อาจจะรอให้หมดสัญญาแล้วค่อยประมูลใหม่อาจจะได้ในราคาที่ถูกกว่านี้ครับ ครั้งนี้อาจจะมาประมูลเพื่อกัน Jas ที่กำลังจะมาตีตลาด Mobile แต่เมื่อราคาที่สูงขึ้น ทางด้าน Jas ก็คงจะสู้ราคาไม่ไหว เพราะว่าอาจจะทำให้ลงทุนไม่คุ้ม  
  สำหรับงานนี้ผมมองว่า AIS ก็คงต้องเตรียมยื่นกู้ Bank รายใหญ่กันเลยทีเดียวครับสำหรับจ่ายค่าประมูลงวดแรก และอาจจะมีเงินทุนสูงกว่าค่ายอื่นอย่าง Ture Dtac และ Jas แต่เมื่อประมูลมาแล้วงานนี้ไม่รู้ว่าจะคืนทุกอีกกี่ปี ทั้งนี้ต้องมีการบริหารจัดสรรดีๆเพื่อที่จะคุ้มกับการลงทุนครับ สำหรับผู้บริโภคอย่างเราก็คงต้องรอดูว่าราคาของ 4G  อนาคตจะเป็นอย่างไรอาจจะถูกขึ้นหรือไม่รู้อาจจะต้องเสียเงินเพิ่มกับการใช้งานครับ เพราะว่า 4G ได้ยินมากว่าเร็วกว่า 3G ถึง 5 เท่า เชียวครับ

วันพุธที่ 11 พฤศจิกายน พ.ศ. 2558

แนะนำ Tools เขียน Cross Platform

      สำหรับใครที่กำลังมองหาเครื่องมือ Tools ในการเขียน Cross Platform ในการเขียน iPhone และ Android  ผมมีชื่อโปรแกรมที่ใช้เขียนมากฝากครับวันนี้ 

- COCOON JS  
     สามารถดาวโหลดได้ที่ https://www.ludei.com
     Language : HTML , JavaScript
     Supported : iOS, Android, Blackberry, Windows Mobile, Tizen and more..


- Code name one 
    สามารถดาวโหลดได้ที่ http://www.codenameone.com
    Language : JAVA
    Supported : Android, iOS, BlackBerry, Windows Mobile Cost – Free and Opensource,                             Premium 79$/m/developer


- Intel XDK
   สามารถดาวโหลดได้ที่ http://software.intel.com/en-us/html5/tools
   Language : HTML , JavaScript
   Supported : Android, iOS, BlackBerry, Windows Mobile, HTML5


- HAXE
  สามารถดาวโหลดได้ที่ http://haxe.org
  Language : HAXE
  Supported : Haxe สามารถ คอมไพล์เป็นภาษาอื่นได้
                      JavaScript, Flash, NekoVM, PHP, C++, C# and Java – which means your                               apps will support all popular mobile devices, such as iOS, Android, BlackBerry                       and more


- OPEN FL
 สามารถดาวโหลดได้ที่ http://www.openfl.org
  Language : HAXE
  Supported : Windows, Mac, Linux, iOS, Android, BlackBerry, Tizen, Flash, HTML5,                                  Steam, Amazon


- PROJECTANARCHY
  สามารถดาวโหลดได้ที่  http://www.projectanarchy.com
  Language : Lua , C++
  Supported : iOS, Android, Tizen

- NOMAD
 สามารถดาวโหลดได้ที่ http://vsnomad.com
 Language : Javascript, HTML5, Visual Studio
 Supported : iOS, Android, Windows Mobile, Blackberry, HTML5

- WAVE ENGINE
  สามารถดาวโหลดได้ที่ http://waveengine.net
  Language : C#.Net
  Platforms : iOS, Android, Windows Mobile

- ENYO
 สามารถดาวโหลดได้ที่ http://enyojs.com
 Language : Javascript, HTML5
 Platforms : iOS, Android, Windows Mobile, Blackberry, HTML5

- GENEXUS
  สามารถดาวโหลดได้ที่ http://www.genexus.com
  Language : C#, C++
  Platforms : iOS, Android, Blackberry, Windows Mobile

- GINGEE
  สามารถดาวโหลดได้ที่ http://www.gingee.com
  Language : Actionscript, Adobe AIR
  Platforms : iOS, Android, Blackberry

   ทั้งหมดนี้ก็เป็นรายชื่อโปรแกรมที่ใช้เขียนนะครับ ว่าแต่ใครถนัดภาษาอะไรก็ลองไปศึกษากันดูนะครับเพราะว่าแต่ละโปรแกรมก็มีภาษาที่ใช้เขียนไม่เหมือนกันครับดังนั้นก็ควรเลือกใช้โปรแกรมตามความสามารถของแต่ละคนได้เลยครับ หวังว่าคงเป็นประโยชน์สำหรับผู้ที่เริ่มเขียน Cross Platfor ครับ

วันอังคารที่ 10 พฤศจิกายน พ.ศ. 2558

AutoHotkey

   ในการเขียน Code ที่ต้องการความรวดเร็ว บางครั้งเราจำเป็นต้องใช้ Key ที่ออกแบบมาสำหรับให้ทำงานง่ายขึ้นและรวดเร็ว วันนี้ผมจะนำเสนอโปรแกรมที่จะทำให้เราทำงานได้ง่ายขึ้น นั้นก็คือโปรแกรม AutoHotkey ที่จะช่วยให้เราไม่ต้องมาเสียเวลากับการนั่งพิพม์ข้อความต่างๆ สามารถดาวโหลดได้ที่นี่ http://ahkscript.org/download/ahk-install.exe  วิธีใช้งานก็ไม่ยากครับ ถ้าเราดาวโหลดมาแล้ว Install ลงในเครื่องก็จะมีลักษณะดังนี้ 

  

  ถ้าเราอยากแก้ script ก็ไม่ยากครับ เพียงแค่คลิกขวาที่เม้าส์ แล้วเลือกเมนู Edit Script 
; คำสั่งปกติ
F1::Send {F6}/duty{enter}
!r::Send {f6}/carlock{enter}
!p::Send {f6}/pray{enter}
!i::Send {f6}/enter{enter}
!o::Send {f6}/exit{enter}
^s::Send {f6}/seatbelt{enter}
!v::Send {f6}/drink vodka{enter}{f6}/hp{enter}{f6}{up}{enter}
!z::Send {f6}/targeton{space}

; คำสั่งพูดคุย
!f::Send {F6}สวัสดีครับ{enter}
!t::Send {F6}ขอบคุณครับ{enter}

ก่อนอื่นผมจะขออธิบาย ตัวสัญลักษณ์ด้านหน้าก่อนซึ่งมีดังนี้... 

!           =  ปุ่ม Alt   ตามด้วยตัวอักษรเช่น  !r    !c            
+          =  ปุ่ม Shift  ตามด้วยตัวอักษรเช่น  +r    +c    
ูู^          =  ปุ่ม Ctrl   ตามด้วยตัวอักษรเช่น  ^r    ^c 
F1-12  =  สามารถใช้ปุ่ม F1 - F12 ได้เช่นกัน
;           =  ส่วนตัวนี้จะมีไว้เพื่อ เขียนข้อความกำกับ ตามที่เราต้องการ เพราะถ้าหากไม่มี ; นำข้อความระบบจะคิดว่าข้อความนั้นเป็นสคริป และ Error ในที่สุด ตัวอย่างผมใช้ เพื่อแยกประเภทคำสั่ง                เช่น ; คำสั่งพูดคุย    ; คำสั่งทั่วไป   ; คำสั่งทำงาน

ต่อไปจะเป็นตัวปุ่มต่างๆ หลังจาก ::Send นั่นคือ {F6} {enter} {up} {space} เป็นต้น

{F6}      >  กดปุ่ม F6 (เพื่อทำการเปิดช่องแชท)
{enter} >  กดปุ่ม Enter (เพื่่อยืนยันข้อความหรือคำสั่ง)
{Up}      >  กดลูกศร ขึ้น " ปุ่ม Up จะใช้เพื่อเลือกข้อความล่าสุดที่เราพึ่งพิมพ์ไป 1 ครั้ง 
                [ ใช้ย้ำคำสั่งต่างๆ แต่ไม่ควรใช้เพื่อฟลัดข้อความเพราะอาจจะโดนลงโทษได้นะครับ ]
{space} >  กดปุ่ม spacebar เพื่อเว้นช่องว่างสำหรับพิมพ์ราคา หรือ ค่าต่างๆ
                 [ เช่น คำสั่ง /find [id] เราจะต้องพิมพ์ /find{space} เพื่อให้ระบบกดปุ่ม spacebar ให้เรา 1 ครั้ง หลังจากนั้นก็แค่ใส่ id                
                   คนที่เราต้องการ และกด Enter ]
{left}     > กดลูกศร ซ้าย เพื่อเลื่อน เคอร์เซอร์ ไปทางซ้ายเพื่อไปเขียนค่าต่างๆที่เลยมาแล้ว  เช่น คำสั่ง /repair [id] [ราคา] 
                ซึ่งเรากำหนดราคาไว้แล้วที่ 30 ก็จะได้โค้ดว่า /repair{space}{space}30{left}{left}{left} เพียงแค่นี้หลังจากที่เรากด
                 ปุ่ม hotkey ระบบก็จะพิมพ์ /repair  30 รอไว้ให้เรา แถมยังเลื่อนเคอร์เซอร์ไปตรงกลาง แค่ให้เราพิมพ์แค่ id เท่านั้น

วันจันทร์ที่ 9 พฤศจิกายน พ.ศ. 2558

FormatFactory

   วันนี้ผมมีโปรแกรมดีๆจะมาแนะนำสำหรับท่านที่ต้องการจะแปลง File ในรูปแบบต่างๆ สำหรับการแปลง File ให้อยู่ในรูปแบบต่างๆนั้นโปรแกรม Format Factory ถือว่าเป็นโปรแกรมที่ใช้ดีมากโปรแกรมหนึ่ง ไมว่าเราจะโหลด File มากจาก youtube หรือว่า download มาจากสื่ออื่นหรือลดขนาดของไฟล์มัลติมิเดีย และต้องการที่จะแปลงให้เป็น .MP3 เพื่อที่จะเอาไว้ฟังในรถ หรือว่าเอาไว้ฟังที่บ้าน  หรือบางท่านต้องการที่จะเอาไว้ดูใน ipad หรือว่า iphone  หรืออุปกรณ์ต่อพ่วงชนิดอื่น

   สำหรับหน้าตาของเจ้าโปรแกรม จะเป็นดังนี้ครับ  


  
คุณสมบัติในการแปลงไฟล์มีเดีย มีดังนี้ครับ
•แปลงไฟล์ทุกรูปแบบไปเป็น MP4/3GP/MPG/AVI/WMV/FLV/SWF
•แปลงไฟล์ทุกรูปแบบไปเป็น MP3//WMA/MMF/AMR/OGG/M4A/WAV
•แปลงไฟล์ทุกรูปแบบไปเป็น JPG/BMP/PNG/TIF/ICO/….
•Rip ไฟล์ภาพยนต์ DVD ไปเป็นไฟล์ video
•รอง รับไฟล์ MP4 สำหรับ iPod/iPhone/PSP format
•รองรับ Source files ของ RMVB.
    จะเห็นได้ว่า สามารถแปลงจาก MP4, AVI ,3GP, RMVB, GIF, WMV, MKV, MPG, VOB, MOV, FLY, FWF ได้แทบทุกนามสกุลรองรับภาษาได้ถึง 56 ภาษา และเมื่อเรา converse เป็นนามสกุลอื่นก็ใช้เวลาเพียงไม่นานขึ้นอยู่กับขนาดไฟล์ที่เราจะแปลง และความเร็วของคอมพิวเตอร์ของเราด้วยครับ  สำหรับลิ้งที่จะดาวโหลด สามารถโหลดได้ตามลิ้งนี้ครับ http://www.pcfreetime.com/ 

วันอาทิตย์ที่ 8 พฤศจิกายน พ.ศ. 2558

TortoiseSVN

   

          TortoiseSVN เป็น SVN Client ที่ได้รับความนิยมมอย่างถล่มทลายสำหรับผู้ใช้ระบบปฎิบัติการวินโดว เนื่องด้วยเป็นของฟรีและใช้งานง่าย โดยสามารถดาวโหลดได้ที่ http://tortoisesvn.net/downloads.html ตัวโปรแกรม TotoiseSVN นี้จะทำหน้าที่เป็น Subversion Client ครับเพื่อจะทำหน้าที่ติดต่อกับ Subversion Server เมื่อดาวโหลดมาเรียบร้อยแล้วก็ติดตั้งเลยนะครับ ขึ้นตอนการติดตั้งผมไม่ได้เขียนไว้ในบทความนี้นะครับเพราะว่ามันแค่คลิ๊กๆ เท่านั่นนะครับ เมื่อติดตั้งโปรแกรมเสร็จให้รีสตาร์เครื่องหลังจากติดตั้งเสร็จรอบหนึ่งก่อนนะครับ เพื่อให้ตัวโปรแกรม TotoiseSVN นั่นได้ติดตั้งการทำงานในระบบ Windows ก่อนนะครับ

        SVN คืออะไร ? SVN เป็น software ที่เป็นตัวกลางช่วยจัดการบริหาร source code จากที่ๆเดียว สำหรับการพัฒนาโปรแกรมที่มีผู้พัฒนาหลายคน (ถ้าทำคนเดียวอาจไม่ต้องมีก็ได้) มีความสามารถป้องกันการแก้ไข code ชนกัน, แสดงสถานะให้ทุกคนทราบว่าตอนนี้ software ที่พัฒนาไปถึงไหนแล้ว ใครทำอะไรลงไปบ้าง, ย้อนเวลา, กู้ไฟล์กลับไปได้เรื่อยๆ เวลาเกิดปัญหา เป็นต้น

วันพฤหัสบดีที่ 5 พฤศจิกายน พ.ศ. 2558

iPhone 6s

    ก็จะเพิ่งเปิดตัวไปสำหรับ Iphone6s เรามาดูว่ามีอะไรใหม่เข้ามาบ้าง เท่าที่ทราบ ใช้ระบบปฎิบัติแการ IOS9 มาพร้อมพับชิปประมวลผล Apple A9 และ M9 motion coprocessor อีกหนึ่งความเปลี่ยนแปลงของ iPhone 6s นั่นก็คือในเรื่องของวัสดุที่นำมาใช้ โดยตัวเครื่อง iPhone 6s นั้นผลิตด้วย อะลูมิเนียมซีรีส์ 7000 ที่มีความแข็งแรงมากกว่าเดิมพอสมควร นอกจากนี้ กระจกหน้าจอยังมาพร้อมกับเทคโนโลยีการผลิตแบบ ion-exchange ซึ่งส่งผลให้ตัวกระจกเองมีความแข็งแรงมากขึ้นกว่าเดิมพอสมควรเลยทีเดียว

ข้อมูล สเปคในเบื้องต้นของ iPhone 6s

- ขนาดตัวเครื่อง 138.3x67.1x7.1 มิลลิเมตร
- น้ำหนักตัวเครื่อง 143 กรัม
- หน้าจอขนาด 4.7 นิ้ว ความละเอียด 1334 x 750 พิกเซล (326ppi)
- ใช้วัสดุเป็น อะลูมิเนียมซีรีส์ 7000 ที่มีความแข็งแรงมากขึ้น
- กระจกหน้าจอ ที่มาพร้อมกับขั้นตอนการผลิตแบบ ion‑exchange ให้ความแข็งแรงมากขึ้น
- ชิปประมวลผล Apple A9 (64-bit) พร้อมชิป M9 motion coprocessor
- รองรับระบบสัมผัสแบบใหม่ 3D Touch
- มาพร้อมกับ Taptic Engine ตอบสนองการสัมผัส
- กล้องดิจิตอลด้านหลัง ความละเอียด 12 ล้านพิกเซล พร้อม True Tone flash
- กล้องดิจิตอลด้านหน้า ความละเอียด 5 ล้านพิกเซล พร้อม Retina Flash
- รองรับการถ่ายวีดีโอความละเอียดระดับ 4K
- รองรับการถ่ายภาพในโหมด Live Photos
- Bluetooth เวอร์ชัน 4.2
- 2nd Generation Touch ID ที่สามารถสแกน ได้อย่างรวดเร็วและแม่นยำขึ้น


สำหรับ iPhone นั้นเรียกได้ว่า จำนวนความละเอียดของกล้องหลัง ไม่ได้มีการเปลี่ยนแปลงมานานพอสมควร และในที่สุด iPhone 6s นั้นก็มาพร้อมกับกล้องดิจิตอลที่มีความละเอียดเพิ่มขึ้นเป็น 12 ล้านพิกเซลเรียบร้อยแล้ว โดยกล้องดิจิตอลด้านหลังของ iPhone 6s นั้นสามารถถ่ายวีดีโอด้วยความละเอียดสูงสุดถึงในระดับ 4K เลยทีเดียว

นอกจากนี้ ยังสามารถถ่ายภาพในโหมด Live Photos ที่ช่วยให้รูปภาพนั้นดูมีชีวิตขึ้นมาได้ โดยเมื่อเปิดการใช้งาน Live Photos ตัวเครื่องจะทำการบันทึกเหตุการณ์ก่อนหน้า เป็นระยะเวลาสั้นๆ เพื่อให้ออกมาเป็น Animation ที่สวยงามเหมือนกับรูปภาพนั้นกลับมามีชีวิตอีกครั้งเลยทีเดียว โดยเปิดราคาเริ่มต้นอยู่ที่ 26,500 บาท



Unity Debugging

        เวลาที่อยากให้ Object บางตัว โผล่ออกมา หรือหายไป แต่มันดันไม่เป็นไปอย่างที่อยากให้เป็น บางทีมันดันมี Object ที่อยากให้หายไปตอนนี้แต่มันดันโผล่มา หรือไม่ยอมหายไป เอ้า ทีนี้จะทำยังไงล่ะ!! วันนี้เลยจะมาบอกวิธีการที่ใช้หาว่า Object ตัวนั้นๆ มันหายไป หรือโผล่มาตอนไหนบ้าง แล้วถูกสั่งให้หายไปหรือ โผล่มาโดย Code บรรทัดไหนเป็นคนสั่ง
1. ก่อนอื่นเลยให้สร้าง Script แล้วใส่ Method ตามนี้
void OnEnable(){
Debug.LogError("OnEnable");
}
void OnDisable(){
Debug.LogError("OnDisable");
}

2. Add Script ที่สร้างใหม่นี้ไปใส่กับ Object ที่ต้องการจะดูว่าหายหรือโผล่มาตอนไหน
3. คราวนี้เมื่อ Object ตัวนี้ หายไป หรือโผล่มา ก็จะมี ข้อความ OnEnable หรือ OnDisable พ่นออกมา พร้อมกับ Call Stack ด้วย ทำให้รู้ได้ทันทีว่า Object หายไปเพราะอะไร

วันอังคารที่ 3 พฤศจิกายน พ.ศ. 2558

[UNITY][NGUI]วิธีทำ Scroll View แบบหมุนได้ไม่รู้จบ (Loop)

ใน NGUI นั้นมี Script สำหรับทำ Scroll View แบบหมุนได้ไม่รู้จบ หรือ Loop Scroll View ซึ่ง Script นั้นมีชื่อว่า UIWrapContent ครับ เราสามารถใช้ UIWrapContent ได้ดังนี้
  • สร้าง Scroll View และ Grid ดังรูป
    1
  • Set ค่าต่างๆใน UIScrollView ดังรูป
    2
  • Add Component และ Set ค่าต่างๆใน UIGrid, UIWrapContent ดังรูป
    3
  • หากต้องการให้ Center on Child ด้วยก็ให้ Add Component UICenterOnChild และ Set ค่าตามรูปในข้อที่แล้ว
  • Add ของลงใน Grid ตามใจเลย หรือจะใส่ Code ให้ Add ของใน Grid ตอน Run Time ก็ได้ทั้งนั้น

วันจันทร์ที่ 2 พฤศจิกายน พ.ศ. 2558

วิธีการ Debug แบบที่ต้องพึ่งผลลัพธ์แบบสุ่มจากฟังก์ชั่น math.random()

        โดยปกติแล้วในโค้ดของเรา ถ้ามีการสุ่มเราจะพึ่ง ฟังก์ชั่น math.random() แต่ที่ในเวลาเราที่เราจะ Debug ฟังก์ชั่น math.random() ของเราจะรีเทิร์นค่าเดิมมาเสมอๆ
ทีนี้เราจะทำยังไงล่ะ ถ้าสมมติโค้ดของเราใช้ได้บ้างพังบ้าง มันก็อาจจะเกิดจากค่าที่เราใช้จาก math.random() ยกตัวอย่างเช่นโจมตีติด Critical หรือใส่ดีบัฟติดหรือเปล่า รันกี่รอบๆก็จะได้ผลลัพธ์เดิมๆเพราะ math.random() ของเราคืนค่าเดิมมาตลบอดนั่นเอง
ตัวอย่างเช่นprint(math.random(100))
57
ซึ่งเรารันอีกกี่ทีก็จะได้ 57 เหมือนเดิม
วิธีการ Debug ให้ได้หลายผลลัพธ์แรกคือ
1. ใส่ For ครอบ
for i=0, 10 ,1 do
print(isCritical(50)) //ใน isCritical มีเช็ค % กับ math.random(100)
end
false
false
false
false
*
จะทำให้ math.random() ของเราทำงานหลายครั้งและเปลี่ยนค่า จากตัวอย่างอาจจะติดในลูปครั้งที่ 5 และ Error ทันที
แต่ถ้าเรามีการกำหนด Seed ไว้ก่อน ให้นำ seed จากรอบที่มีปัญหามาเช็คได้เลย
2. กำหนด randomseed ก่อน
math.randomseed(seed)
print(isCritical(50))

ก็จะทำให้เราพบบรรทัดที่ Error ได้เลยเพราะ จะ Debug Error ในทันทีครับ

วันเสาร์ที่ 31 ตุลาคม พ.ศ. 2558

Vultr Cloud Hosting มีดีอย่างไร?

          ก่อนอื่นขอ Review เทียบ DigitalOcean vs Linode vs Vultr ที่เป็น SSD Cloud Hosting เหมือนกันนะครับ (หาข้อมูลจากในเน็ตมาเทียบๆ กันดูได้สรุปดังนี้)
Vultr - Performance ดีสุด Support ดีมาก Feature ครบครัน แต่ไม่ค่อยเปิดเผยข้อมูลว่า Hardware ที่รองรับด้านล่างเป็นอะไรบ้าง ราคาน่าจะถูกสุดเพราะมี 20% Discount อยู่ตอนนี้ เป็นน้องใหม่จากบรรดา 3 เจ้า Feature ใหม่ๆ ถูกพัฒนาอย่างต่อเนื่องรวดเร็วมาก ผ่านไปไม่กี่เดือน Feature ใหม่งอกตรึม ที่สำคัญ มี Private Network ที่ลูกค้าคนอื่นเข้าถึงไม่ได้ด้วยนะ! API ให้ยิงน้อยที่สุดใน 3 เจ้า เนื่องจากยังเป็นน้องใหม่อยู่ รอดูอนาคตยาวๆ อ้อ มี Location ให้เลือกมากสุดในสามเจ้าด้วย
Linode – Feature เยอะสุดเนื่องจากเก่าแก่ที่สุด (บุญเก่ามีเยอะ) ลูกค้าสามารถทำอะไรเองโดยไม่พึ่ง support ได้หลายอย่าง มี Feature ใกล้เคียง Dedicate Host มากที่สุด แต่ Support กากสุดๆ ตอบไม่ตรงคำถาม โบ้ยความผิด นั่นนี่ รู้สึกว่าคนดูแล support จะน้อยด้วย ส่วน Performance ดีเป็นอันดับสอง (แพ้แค่ 10%) ว่ากันตามจริงคน Review เชียร์ Linode เยอะมากๆ เรื่อง Stability และ Feature ที่เยอะกว่าคู่แข่ง สงสัยบุญเก่าเยอะจริง ข้อดีอีกอย่างคือสามารถ Scale up และ Scale down ผ่านหน้าเว็บโดยไม่ต้องกดสร้างจาก snapshot ได้ทำให้สะดวกกว่าเจ้าอื่นๆ
DigitalOcean – Performance กากสุด (ต่ำกว่าชาวบ้าน 2 เท่า) Feature น้อยสุด Support ดีเลิศที่สุด ถ้าทำอะไรพลาดหรือทำเราเสียเวลาจะคืนเป็น Credits ให้ น่าจะดังที่สุดในตอนนี้เพราะน่าจะออกสื่อบ่อยสุดละ รวมไปถึง community และ Document จะมากที่สุด
โอเค พอรู้จักกันแล้วมาเข้าสู่เนื้อหาว่า Vultr ทำอะไรได้บ้าง ข้อดีก็ตามนี้เลย
  • ราคาถูกกว่าชาวบ้าน performance ดีกว่าชาวบ้านตามที่ได้กล่าวไปแล้ว
  • มี Reserved IP เอาไปผูกติดกับ instance ไหนก็ได้ คล้าย Elastic IP ของ amazon ย้ายกลางทางก็ได้ (ต้อง restart เครื่อง กินเวลาประมาณ 3-5 นาที) ส่งผลให้ไม่ต้องสร้าง load balance มาคั่นกลางให้เปลืองค่า bandwidth และ spec เครื่องที่มีแต่ load balance เท่านั้น แถมในทางทฤษฎี ถ้า bandwidth ใกล้เต็มก็สามารถลบทิ้งสร้างใหม่เพื่อ Refill bandwidth ได้ด้วย (ยังไม่เคยทำหรอก แต่คิดว่าน่าจะได้ ถ้าไม่โดน ban 555)
  • มี location ให้เลือกมากกว่าคู่แข่งมาก
  • มี local storage หรือก็คือ instance ที่เป็น hdd จานหมุนธรรมดาให้เลือกใช้ใน network เดียวกันด้วย เอาไว้เก็บ backup ได้ง่ายๆ โดยดีกว่า ssd เรื่องความจุที่มากกว่า (แค่เรื่องเดียวน่ะแหละ) ตอนนี้มีแค่ 4 location ให้เลือกคือ New Jersey, Los Angeles, Amsterdam, Tokyo
  • Snapshot ฟรี! กี่อัน ขนาดเท่าไหร่ก็ได้ เนื่องจากยังเป็น beta (อนาคตอาจเก็บตัง)
  • Snapshot นี้จะ Restore กันข้าม Location ก็ได้นะ!
  • มี internal private network ที่ access จาก account ลูกค้าคนอื่นไม่ได้ ไม่เหมือนกัน digitalocean
  • มี kvm เข้าไปดูหน้าจอเครื่องได้เวลาเซ็ตค่า network อะไรผิดก็สามารถเข้าไปแก้ไขได้
  • ลง OS อะไรก็ได้จากเครื่องเรา ไม่จำเป็นต้องเป็น OS ที่ vultr เตรียมให้
  • มี IPv6
  • มี DDos Protection.
  • มี credit ให้ใช้ฟรีครั้งแรก $50 ผ่าน link นี้ !!
สำหรับ Reserved IP ต้องส่ง Ticket ไปขอเปิดใช้งานก่อนนะครับถึงจะใช้ได้ (ยัง Beta แต่ก็ไม่พบปัญหาอะไรเท่าที่ใช้มา) มี Trick เล็กน้อยคืออย่ากด convert ip ที่มีอยู่แล้วและผูกกับเครื่องอยู่ไปเป็น reserve ip เพราะคุณจะไม่สามารถถอด ip นั้นออกจาก Instance ตัวนั้นได้อีกต่อไปตลอดกาล จนกว่าจะลบ instance นั้นทิ้ง เพราะ Instance ตัวหนึ่งๆ จะต้องมี ip ผูกไว้อย่างน้อยหนึ่ง ip เป็นข้อกำหนดขั้นต่ำ เช่นเดียวกับการสร้าง Instance ใหม่ ห้ามสร้างโดยระบุ ip จาก reserved ip ไม่งั้นจะย้าย ip ไม่ได้นอกจากลบ instance ก่อนอีกเช่นกัน วิธีที่ถูกต้องคือให้ไปเพิ่ม reserve ip สำหรับเครื่องนั้นๆ โดยตรงแล้วค่อยกด detach และกด attach เข้าเครื่องใหม่ จึงจะสามารถย้าย ip ไปผูกกับเครื่องใหม่ได้อิสระโดยไม่ต้องทำลายเครื่องเก่าทันที ทำให้หากมีข้อผิดพลาดอะไรต้อง copy จากเครื่องเก่ามาก็ยังสามารถทำได้
ใช้มาเดือนนึงมีปัญหาติดขัดหน่อยนึงคือจู่ๆ Instance ก็ restart ตัวเอง! (เครื่อง database ด้วย แหม่… ดีที่ไม่พัง ข้อมูลยังไม่เยอะ) แต่เมื่อ restart vultr ก็รีบ email มาแจ้งทันทีว่าต้อง restart เนื่องจากเกิดเหตุ critical issue บางอย่างบน physical server ก็เลยจำเป็นต้องทำอย่างเร่งด่วน ก็รอดูต่อไปว่าจะมีปัญหาอย่างอื่นอีกไหม รวมๆ ก็ยังถือว่าดีอยู่ครับ 

วันศุกร์ที่ 30 ตุลาคม พ.ศ. 2558

รวมคำสั่ง ADB

           ADB (Android Debug Bridge) ก็คือเครื่องมือ comand line tools ตัวหนึ่งเอาไว้สั่งการจาก PC ไปยังมือถือที่ต้องการผ่านสาย USB (หรือ wifi ) สามารถเรียกใช้งานได้ผ่าน path
sdkpath/platform-tools/adb
โดย sdkpath คือ path ที่เราลง android sdk ไว้ สรุปคำสั่งที่ใช้บ่อยๆ มีดังนี้
  • adb devices – เป็นคำสั่งแรกที่ต้องใช้หลังนำมือถือเสียบ computer เป็นครั้งแรก เพื่อเช็คว่า PC เห็นมือถือเครื่องนี้หรือยัง หากปรากฏชื่ device มาก็แสดงว่าเริ่มต้นใช้งานได้ หากยังไม่ปรากฏ ต้องอนุญาตให้ PC เครื่องนี้สั่งการมือถือเครื่องนี้ได้ก่อนด้วยการ Enable Debug mode ผ่าน USB ที่ตัวเครื่องมือถือ แล้วเสียบ PC และติ๊กอนุญาตให้ PC สั่งมือถือเครื่องนี้ได้ (ป้องกันใครไม่รู้มาเอามือถือเราไปสั่ง adb ลบโปรแกรมทิ้งเล่น)
  • adb logcat -s Unity – ใช้ดู log ที่พ่นผ่าน app ที่สร้างจาก Unity ทั้งหมด
  • adb install path/to/apk – ใช้ install apk ลงเครื่อง
  • adb install -r path/to/apk – ใช้ Install apk เหมือนเมื่อกี้ แต่ต่างจากเดิมคือถ้ามี app นั้นๆ อยู่แล้วในเครื่องจะลงทับให้อัตโนมัติ ไม่ต้อง uninstall ก็ได้
  • adb install -d path/to/apk – เหมือนอันบน แต่อนุญาติให้ install apk ที่เลขเวอร์ชั่นต่ำกว่าเดิมทับ app เดิมที่อาจจะใหม่กว่าได้
  • adb uninstall com.packagename.myapp – uninstall โดยกำหนดชื่อ package ที่ต้องการ com.packagename.myapp ซึ่งบางครั้งการ uninstall ที่ตัวเครื่อง android เองจะยังไม่ลบ app ไปจริงๆ ก็ต้องใช้คำสั่งนี้ช่วย
  • adb clear com.packagename.myapp – clear ข้อมูลของ app ที่ระบุทั้งหมด (ให้ผลเหมือนการกด clear cache/clear data ผ่าน app manager ในมือถือ)
  • adb push path/in/pc path/in/android-device – ใช้ copy ไฟล์จากเครื่อง PC ลงมือถือผ่าน command line
  • adb pull path/in/android-device /path/in/pc – ใช้ copy ไฟล์จากมือถือมาลง PC ผ่าน command line
  • adb shell screenrecord /path/in/android-device/demo.mp4 – ใช้อัดหน้าจอมือถือลงเครื่องเพื่อทำ screencast ได้อย่างสะดวก (ใช้ได้เฉพาะ android 4.4 ขึ้นไปเท่านั้น)

วันพฤหัสบดีที่ 29 ตุลาคม พ.ศ. 2558

(English) PHP Weighted Random

      ข้อมูลบางค่าที่จะนำมาตัดสินเรื่องต่างๆ ในเกมส์ หลายครั้งที่หนีไม่พ้นการสุ่ม หรือ Random
และโลกนี้ไม่ยุติธรรมเสมอไป จึงจำเป็นต้องมีการใช้การสุ่มแบบถ่วงน้ำหนัก หรือ weighted random
โดยส่วนใหญ่ทาง Server จะต้องเป็นผู้ตัดสินเรื่องนี้ จึงแสดงตัวอย่างวิธีการสร้างการสุ่มประเภทนี้ด้วยภาษา PHP

เริ่มด้วยการสร้าง Weighted Array ของตัวแปลขึ้นมาก่อน โดยให้ key เป็นผล value เป็นน้ำหนัก$weight = array(
'a'=>1,
'b'=>3,
'c'=>5,
'd'=>7);

เนื่องจาก function ที่เราจะใช้สุ่มตัวเลขออกมาคือ rand ซึ่งจะให้ค่าเป็น int เท่านั้น หากมีค่าใดในน้ำหนักเป็นทศนิยม
ให้ทำการคุณทั้งหมดเพื่อเลื่อนทศนิยมทิ้งไปให้หมดก่อน ตัวอย่างเช่น ‘a’=>1.5, ‘b’=> 2 ให้คุณออกมาเป็น ‘a’=>15, ‘b’=>20 เสียก่อน
ต่อไปก็จะเป็นการสุ่มผลดังนี้
$roll = rand(1,array_sum($weight);
จากนั้นทำการหาผลของการสุ่มโดยไล่วัดตาม array
foreach($weight as $key=>$value){
if($roll > $value){
$roll = $roll - $value;
}else{
return $key;
}}

ซึ่งสามารถนำคำสั่งเหล่านี้ไปสร้างเป็น function ที่รับเพียง weight array ที่แตกต่างกันเพียงอย่างเดียวก็ได้

วันพุธที่ 28 ตุลาคม พ.ศ. 2558

วิธีอ้างอิงข้อมูลด้วยชื่อคอลัมม์

         เมื่อทำงานผ่าน PHPExcel มาสักระยะ ทุกท่านก็คงจะพบปัญหาเช่นเดียวกันคือ ข้อมูลที่เราเคยอ้างถึงมันถูกเลื่อนออกจากจุดเดิมไป ทำให้ข้อมูลขาดหายไปโดยไม่รู้ตัว เราต้องหาวิธีจัดการกับปัญหานี้เช่นกัน
พยายามรืัอ libraries หา function สำเร็จรูปแต่ก็ไม่พบ ถ้าใครพบก็ฝากแจ้งด้วยนะครับ
จึงหาวิธีจัดการเรื่องนี้ด้วยตนเอง วิธีก็คือ
  1. สร้างแถวสำหรับระบุคอลัมน์ โดยชื่อห้ามซ้ำกันเด็ดขาด
  2. ประกาศตัวแปร $header มารับข้อมูลจาก function สมมติว่าอยู่แถวที่ 1$header=array_flip($data[1]);
  3. เวลาใช้งานก็แทนคอลัมน์จาก สมมติว่า A =name เดิม$data[2]['A'] เป็น $data[2][$header['name']]
หลังจากนี้ ไม่ว่า name จะย้ายไปอยู่คอลัมน์ไหน ก็ไม่มีปัญหาอีกต่อไป

MariaDB คืออะไร? และลองเปรียบเทียบกับ MySQL

MariaDB and MySQL


Performance ของ MariaDB กับ MySQL เป็นอย่างไร ?
การเปลี่ยนจาก MySQL เป็น MariaDB จะไม่มีผลต่อการใช้งานโปรแกรมเดิมที่มีอยู่เลย และยังจะได้Performance ที่สามารถทำงานได้เร็วกกว่าของ MySQL อีกด้วย ประมาณ 10% ทั้งนี้ถ้ามีความสามารถอื่น ๆ จะนำมา Update ให้ทราบโดยทั่วกันครับ


ถึงเวลาที่จะเปลี่ยนจาก MySQL เป็น MariaDB แล้วหรือยัง ?
ในปัจจุบัน Hosting ที่รองรับ MariaDB ยังมีน้อยมาก เพราะฉะนั้นอาจจะต้องรอซะพัก ถึงจะค่อยมาเปลี่ยนใช้ แต่ถ้าสำหรับสมาชิกที่มี Server ของตัวเอง ก็สามารถที่จะเปลี่ยนมาใช้งาน MariaDB ได้ทันที โดยในปัจจุบัน MariaDB จะอยู่ที่ Version 5.5.31 Stable

MariaDB

MariaDB An enhanced, drop-in replacement for MySQL.


ข้อเปรียบเทียบระหว่าง MariaDB กับ MySQL

Maria DB vs mySQL

วันอังคารที่ 27 ตุลาคม พ.ศ. 2558

mysqli

            mysqli ย่อมาจาก mysql improved หรือชุดคำสั่งสำหรับติดต่อ mysql server ที่พัฒนามากขึ้น โดยมีจุดที่ดีกว่า mysql ตรงที่


Object-oriented interface
เมื่อสั่งคำสั่งติดต่อกับ mysql หรือทำการ query ข้อมูล จะไม่ออกมาเป็นตัวแปรค่าผสม (mixed value) แล้วนะครับ จะได้เป็น object มาแทน และตัว object นี้จะสามารถใช้ method ในตัวมันได้เลย จึงทำให้การเขียนติดต่อกับ mysql หลายๆ server พร้อมกันง่ายขึ้น

Support non-blocking, asynchronous queries with mysqlnd
สนับสนุนการทำ query แบบ async เหมาะกับคำสั่ง INSERT , UPDATE หรือ DELETE โดยไม่จำเป็นต้องรอให้คำสั่งนั้นเสร็จก่อน สามารถทำคำสั่ง php ถัดไปได้เลย

Support for Prepared Statements
ว่ากันง่ายๆคือการเตรียมคำสั่ง query เอาไว้ที่ mysql server จากนั้นก็ทำการส่งแค่ค่าตัวแปรบางตัวไป call query บน server เหมาะกับการใช้คำสั่งซ้ำบ่อยๆ

Support for Multiple Statements
สนับสนุนการทำคำสั่งพร้อมๆกันหลายๆคำสั่ง

Support for Transactions
สนับสนุนการทำ Transactions

Enhanced debugging capabilities
ช่วยในการ debug code query ของ mysql มากขึ้น

Embedded server support
สนับสนุน Embedded server (มันคืออะไร อยากรู้เหมือนกันแฮะ) คัดลอกบางส่วนจากที่นี่

อีกทั้งฝั่ง php ประกาศแล้วว่า mysql จะถูก deprecated ใน version 5.5 และจะ removed ใน version ถัดไปด้วย
รวมถึงประสิทธิภาพโดยรวมของการใช้ mysqli แทน mysql จะดีขึ้นกว่าเดิม
เทียบคำสั่งระหว่าง mysql และ mysqli
// เชื่อมต่อฐานข้อมูล (connect)
$link = mysql_connect(“host”,”username”,”password”); // mysql
$db = new mysqli(“host”,”username”,”password”); // mysqli

// เลือกฐานข้อมูล (schema)
mysql_select_db(“database name”,$link); // mysql
$db->select_db(“database name”); // mysqli

// ส่งคำสั่ง (query)
$result = mysql_query(“STATEMENT”,$link); // mysql
$result = $db->query(“STATEMENT”); // mysqli

// แกะข้อมูล 1 แถว (fetch array)
$data = mysql_fetch_array($result); // mysql
$data = $result->fetch_array(); // mysqli

// แกะข้อมูลครบทุกแถว (fetch all array)
while ($row = mysql_fetch_array($result)){ } // mysql
while ($row = $result->fetch_array()){ } // mysqli

// หมายเลข id ที่แทรกข้อมูล (insert id)
$insert_id = mysql_insert_id($link); // mysql
$insert_id = $db->insert_id; // mysqli เก็บเป็นตัวแปร ไม่ได้สั่งผ่าน method

// จำนวนแถวที่มีการเปลี่ยนแปลง (affected rows)
$affected_rows = mysql_affected_rows($link); // mysql
$affected_rows = $db->affected_rows; // mysqli เก็บเป็นตัวแปร ไม่ได้สั่งผ่าน method

// จำนวนแถวที่ query มาได้ (number of rows)
$num_rows = mysql_num_rows($result); // mysql
$num_rows = $result->num_rows; // mysqli เก็บเป็นตัวแปร ไม่ได้สั่งผ่าน method

// Real escaped string
$esc_string = mysql_escape_string($string); // mysql
$esc_string = $db->escape_string($string); // mysqli