วันเสาร์ที่ 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

Firebug – อุปกรณ์คู่ใจ Web Developer


           โดยบทความนี้ขอเสนอ Add-on คู่ใจ web developer, facebook developer และ อื่นๆมากมาย
Firebug ซึ่งเป็น Add-on ที่มีให้ใช้ใน Firefox Browser เป็นหลักแต่ Browser อื่นๆก็สามารถ Download version lite มาใช้ได้แต่จะมี feature ไม่ครบเหมือนใน Firefox นะครับ
เว็ปไซต์ http://getfirebug.com
หน้าดาวโหลด http://getfirebug.com/downloads หรือ search หา add-on บน Firefox
ดาวโหลดไปใช้ใน Browser อื่น http://getfirebug.com/firebuglite
Extension เสริม  http://getfirebug.com/wiki/index.php/Firebug_Extensions
โดยรุ่นล่าสุดจะอยู่ที่ 2.0.7 สำหรับ Firefox 4.1.0.2 (27/10/2015)
เมื่อติดตั้งและทำการเริ่ม Browser ใหม่แล้ว
เราสามารถเรียกใช้ Firebug ได้โดยง่ายๆเพียงแค่คลิ๊กขวาบนหน้าเพจ
ในบริเวณที่เราต้องการทราบ source code หรือต้องการ debug
แล้วเลือก Inspect Element ก็จะมีpanelด้านล่างโผล่ขึ้นมา
พร้อมโค้ตต่างๆในทั้งหน้าเวป โดยจะ mark ส่วนที่เราเลือกไว้
ยังมีลูกเล่นต่างๆที่เราสามารถลองดูได้
ซึ่ง UI ก็ถูกออกแบบมาให้ง่ายต่อนักพัฒนาเวปกันอยู่แล้ว
ฟีเจอร์และเทคนิคต่างๆของ Firebug
ล้วนแล้วแต่เป็นประโยชน์ต่อการทำงานและพัฒนาบนเวปไซต์อย่างยิ่ง
ฉะนั้นจึงควรรู้จักและหัดใช้ให้เกิดประโยชน์จะช่วยลดระยะเวลาได้เป็นอย่างดี
ฉะนั้นอย่าลืมเลยที่จะลง Firebug คู่กับ Firefox 4 ครับ

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

Unit test (PHPUnit)

        ก่อนอื่นเรามาเกริ่นกันก่อนนะว่า Unit test คืออะไร มีประโยชน์ยังไง และใช้ยังไง
Unit test – เป็นการทดสอบในระดับ function call เพื่อเป็นการยืนยันการทำงานระดับย่อยที่สุดว่าทำงานได้ถูกต้อง เป็นการทดสอบโดยนักเขียนโปรแกรมผู้เขียนโค้ด
ประโยชน์ของ Unit test
- ช่วยให้โครงสร้างโค้ดดีขึ้น
- Developer ที่มารับงานต่อ สามารถทำความเข้าใจโค้ดได้ง่ายขึ้น โดยการดู unit test ที่เขียนไว้
เป็นต้น
ใช้ยังไง วันนี้เราจะมาพูดถึง PHPUnit กันนะครับ
เราจะข้างเรื่องของการ Install ไปนะครับ เอาเป็นว่าไปดูกันในนี้ละกันนะครับ วิธี Install PHPUnit
เราจะมาดูกันในเรื่องการเขียน Unit test ดีกว่านะครับ
class Class_nameTest extends PHPUnit_Framework_TestCase{
static $variable;
public static function setUpBeforeClass(){
self::$variable = 123;
}
function setUp(){
$this->variable = self::$variable;
}
function test1(){
$this->assertTrue(true);
}
function test2(){
$this->assertFalse(false);
}
function test3(){
$this->assertEquals(1, 1);
}
}
โดยตั้ง Class_name คือชื่อ Class ที่เราจะ Test แล้วตามด้วยคำว่า Test
ประกาศตัวแปรชื่อ variable ให้เป็น global variable (ในที่นี้ให้ตัวแปรชื่อนี่เฉยๆ ตอนใช้จริงจะตั้งชื่อตัวแปรว่าอะไรก็ได้นะ)
function setUpBeforeClass เป็น function ที่จะทำแค่ครั้งเดียวตอนก่อนจะ Test Class นี้
function setUp เป็น function ที่จะทำทุกครั้งก่อน Test แต่ละ Function
function ที่มีชื่อขึ้นต้นว่า test จะเป็น function ที่ใช้ test จริงๆ
จากตัวอย่างนี้ ลำดับของ function ที่จะถูกเรียกก็เป็นตามนี้
setUpBeforeClass -> setUp -> test1 -> setUp -> test2 -> setUp -> test3

การใช้คำสั่ง screen ใน linux

         screen คือคำสั่งในการรัน command linux ต่างๆ แบบเปิดทิ้งไว้ แม้เน็ตจะหลุด คอมจะพัง เราก็ยังสามารถ remote มาเปิด session เดิมได้โดยที่มันไม่หายไปดื้อๆ เหมาะอย่างยิ่งสำหรับคนเน็ตไม่เสถียร มีวิธีใช้งานดังนี้ เช่น
screen mysqldump -uroot -pxxx > backup.sql
วิธีการใช้การก็เพียงแค่พิมพ์คำว่า screen นำหน้าคำสั่งที่เราต้องการ เช่น mysqldump เรารู้ว่ามันนานมาก เลยสั่ง screen ไว้ หากกด CTRL+A คำสั่งเริ่มต้นก่อนจะป้อนคำสั่งอื่นๆ ของ screen ไม่อย่างนั้นจะยังเป็นการสั่งไปยัง process ที่ทำงานภายใน screen ไม่ใช่ตัว screen เช่นเดิม แล้วจะมีคำสั่งต่อดังนี้
    • d – ออกจากคำสั่ง screen โดยจะเข้าไปดูต่อวันหลังได้
    • [ - เข้าสู่ copy mode ตรงนี้เมื่อเข้าแล้วจะมีคำสั่งดังต่อไปนี้ (ส่วนใหญ่แทบจะลอกจาก vi มาทั้งดุ้น)
      • u - ออกจาก copy mode
      • h - ขยับ cursor ไปทางซ้าย
      • j - ขยับ cursor ลงข้างล่าง
      • k - ขยับ cursor ขึ้น
      • l - ขยับ cursor ลง
      • G - ขยับ cursor ไปที่ line ที่กำหนด
      • CTRL+u - เลื่อนขึ้นครึ่งหน้า
      • CTRL+d - เลื่อนลงครึ่งหน้า
      • CTRL+b - เลื่อนขึ้นหนึ่งหน้า
      • CTRL+f - เลื่อนลงหนึ่งหน้า
      • / - search จาก cursor ลงไปข้างล่าง (กด n เพื่อ search next)
      • ? - search จาก cursor ขึ้นข้างบน (กด n เพื่อ search next)
และหากกด d เพื่อออกจากคำสั่ง screen ไปแล้ว หรือเน็ตหลุดระหว่าง run screen เราสามารถพิมพ์ "screen -r" เพื่อกลับไปยัง session เดิมที่รันไว้ หรือหากมีหลาย session จะมีข้อความแสดงเช่นดังนี้

There are several suitable screens on:
24146.pts-5.node1 (04/30/13 23:48:40) (Detached)
23909.pts-5.node1 (04/30/13 23:33:22) (Detached)
23817.pts-5.node1 (04/30/13 23:27:58) (Detached)
23647.pts-0.node1 (04/30/13 23:21:36) (Attached)
Type "screen [-d] -r [pid.]tty.host” to resume one of them.
เราอยากเข้าอันไหนก็พิมพ์ตามที่เค้าบอก เช่น "screen -r 23817.pts-5.node1" ก็จะกลับ 

วิธีดึงข้อมูลจาก excel มาใช้งานใน php โดย PHPExcel


       วิธีใช้นี้เป็นการทำงานผ่าน Code igniter นะครับ เริ่มต้นด้วยการประกาศค่าของ Reader กันเลย
ชุดแรกให้ประกาศไว้ใน function __construct() 

$inputFileType = PHPExcel_IOFactory::identify($file_path);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(TRUE);
$this->xlsx = $objReader->load($file_path);
  • บรรทัดแรกเป็นการหาประเภท file  ถ้าไม่รู้ ไม่อยากรู่้ หรือขี้เกียจก็ประกาศไว้อย่างงี้ให้โปรแกรมมันไปหาเอาเองหล่ะกัน
  • บรรทัดต่อมาเป็นการกำหนดให้สร้าง reader ตาม file type ที่ได้มาจาก identify
  • บรรทัดที่สามใส่ไว้ถ้าต้องการแค่ดึงข้อมูลออกมาจาก excel ครับ ลดการทำงานของ function ประหยัดทรัพยากร
  • แล้วก็ทำการสั่งโหลด file ใส่ตัวแปลเอาไว้ครับ อย่าลืมประกาศ ตัวแปลเพื่อจะได้ใช้งานทีเดียวครับ
ชุดต่อมาเป็นการใช้งานภายใน function
$this->xlsx->setActiveSheetIndex(0);
$data = $this->xlsx->getActiveSheet()->toArray(null, true, true, true);
  • บรรทัดแรกใช้ตั้งค่า active sheet ครับ เริ่มนับจาก 0
  • บรรทัดที่สองก็ทำการดึงค่า active sheet มาใส่ไว้ใน ตัวแปล array เพื่อใช้งานใน php กันต่อไปครับ
วิธีอ้างถึงข้อมูลคือ $data[แถว][คอลัมน์] เช่น $data[0]['A']

วันอาทิตย์ที่ 25 ตุลาคม พ.ศ. 2558

Sublime SFTP

ขั้นแรกเราก็ไปโหลด Plugin มาก่อน
https://github.com/SublimeText/Mote
กดโหลดข้างบนเลยครับ

เมื่อโหลดเสร็จแล้วเราก็แตกไฟล์แล้วเอาไปไว้ใน Folder Packages ของ Sumlime นะครับ หากใครไม่รู้ว่ามันอยู่ตรงไหนกด ที่ menu Preferences->Browse Packages… ดูนะครับ มันจะมีหน้าต่างคล้ายๆ open file ขึ้นมาอ่ะครับ ตรงนั้นแหละครับ ที่ตั้งของ Folder Packages
พอเอา Folder ไปใส่ไว้เสร็จให้ copy psftp.exe ที่ download จาก web putty มาไปใส่ใน folder นั้น
ต่อมาเป็นการแก้ config นะครับ ใน Folder ของ Mote นั้นจะมีไฟล์ชื่อว่า servers.json ให้เราเปิดมันด้วย text editor(ถ้าไม่รู้จะใช้อะไร ก็ใช้ sublime เนี่ยแหละคร้าฟฟฟ) แล้วก็เพิ่ม config server ของเราเข้าไปครับ
เช่น
“pokdeng”:{
“connection_string”: “root@xxx.xxx.xxx.xxx”,
“port”: “xxxxx”,
“private_key”:”D:\\private.ppk”,
“idle_recursive”: false,
“default_path”: “/home/test/test”
}
ข้อควรระวังคือ private_key ใน path ห้ามมีเว้นวรรคโดยเด็ดขาด ไม่อย่างนั้นจะไม่สามารถใช้งานได้
เมื่อแก้ config เสร็จให้เรา save ทีนึง และก็ปิดมันไปได้เลยยย หมดประโยชน์ละ
เมื่อเราจะใช้ Mote ก็ให้กด
ctrl+shift+p
พิม Mote
เลือก server ที่เรา config ไว้ กด Enter

ถ้าหาก connect สำเร็จ มันจะมีหน้าต่างให้เราเลือก ไฟล์ ที่เราจะแก้
ถ้าเลือกไฟล์แล้ว มันจะ download มาใส่ไว้ใน folder temp ของ plugin
หลังจากนั้น ถ้าเราแก้ไขอะไรไฟล์นี้และกด save มันจะ upload ให้อัตโนมัติ

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

การเลือก Tools มาช่วยในการติดต่อสื่อสารในองค์กร


การเลือก Tools มาใช้ในการจัดการ Project Management Tools ก็มีส่วนสำคัญในการพัฒนาองค์กรให้ไปในทิศทางเดียวกัน อีกทั้งยังช่วยในการติดต่อสือการกันระหว่างทีมต่างๆ เช่นทีม develop , programmer,tester, sa, pm ดังนั้นควรเลือกใช้ Tools ให้เหมาะสมกับระบบ และเหมาะสมกับองค์กรของเรา ดังนั้น Tools ที่จะแนะนำมีดังนี้

Trello

ข้อดี: เป็น Tools สำหรับกำหนด Task งานต่างๆ สามารถใช้แทนกระดาน Post-it ที่แปะๆ กันได้อย่างดีเยี่ยม คุณสมบัติเด่นคือ Visualize หรือสามารถเห็นทุกอย่างได้พร้อมกันหมด เห็น Process การทำงานว่าอยู่ที่ Step ไหนอยู่ คอขวดอยู่ที่ไหน กำหนดงานที่ต้องส่งต่อๆ กัน เป็น Dependency ได้อย่างดีเยี่ยม เหมาะอย่างยิ่งกับทีมขนาดเล็ก และข้อดีที่สำคัญที่สุดคือใช้งานง่ายมากกกก ไม่ถึงชม.ก็สามารถใช้งานระดับทั่วๆ ไปได้แล้ว Learning Curve ต่ำ การบังคับให้คนมาใช้จึงเป็นเรื่องง่ายตามมา
ข้อเสีย: คือเป็นระบบเปิด ใครก็ทำอะไรนั่นนี่ได้ตามใจชอบ ไม่มี Permission ที่ชัดเจน และสร้าง subtask หรือดู overall งานหลายๆ โปรเจคได้ไม่สะดวกนัก

Asana

ข้อดี: เป็น Tools ที่เหมาะสำหรับงานที่ใหญ่จาก Trello ขึ้นมา มีระบบ Permission เป็นตัวเป็นตนมากขึ้น Assign งานให้คนอื่นได้อย่างชัดเจน (เหมาะกับคนที่ชอบสั่งงานให้คนอื่นว่างั้นเถอะ) ดูหลายๆ โปรเจคพร้อมกันได้ สร้าง subtask ได้ และเหมาะที่สุดคือใช้ระหว่างเจ้านายกับเลขา เพราะเลขาจะ assign สิ่งที่เจ้านายต้องทำในวันถัดไปมา และเจ้านายทำอะไรไปแล้วบ้างก็ต้องมากด Done เพื่อ track ว่าเหลืองานอะไรอีกบ้างได้สะดวก ตอนเริ่มใช้ครั้งแรกจะมีให้เลือกว่าเราจะเอาไปทำงานประเภทไหน เหมือนมี Template ตั้งต้นมาให้ เช่นเอาไปบริหาร CRM ก็ได้ ซึ่งจะมี Timeline เอาไว้ให้ทีมงานคุยกันโดยเฉพาะ แบ่งทีม Sale กับทีม Dev ได้สะดวก
ข้อเสีย: ยังไม่สามารถทำ Project Management ระดับใหญ่ๆ เช่นตั้ง MileStone ของบริษัท การใช้งานค่อนข้างยุ่งยากกว่า Trello มาอีกขั้น ต้องใช้เวลาศึกษาระดับหนึ่งจึงเริ่มใช้งานได้คล่อง
ต่อไปด้านล่างจะเป็น Tools อื่นๆ ที่ไม่ใช่ Project Management 

Podio

ข้อดี: เป็น Tools ที่ทำได้ทุกอย่างบนโลก (เค้าว่างั้น) โดยจะมีคล้ายๆ App Store ของตัวเอง ซึ่งมีคนทำ Plugin ทั้งฟรีและขายมาให้ในทุกๆ ระบบ สามารถนำระบบโน้นมาผสมกับระบบนี้ได้อย่างอิสระ Custom ได้ทุกรายละเอียด และสามารถทำ Projection ระดับ Milestone ของบริษัท, ตั้งงบประมาณของ Project และแจ้งว่าใช้ไปเท่าไหร่แล้วได้ ใช้ได้ทุกทีมทุกสาขาตั้งแต่ Dev, Sale, Marketing สามารถออกแบบได้ตามใจหมด
ข้อเสีย: Learning Curve สูงที่สุดจากทั้ง 3 ตัวคือ Trello, Asana,Podio ใช้เวลาศึกษานานอาจหลายสัปดาห์หรือเป็นเดือน กว่าจะได้ออกมาเป็นสิ่งที่ต้องการ เนื่องจาก Custom ได้ทุกอย่าง ดังนั้นเราจะต้องจัดวาง ตั้งค่าเองทุกอย่าง ซึ่งกินเวลามากกว่าจะได้ใช้งานตามวัตถุประสงค์
Tools สามตัวบนนี้สามารถ integrate กับ Dropbox, Google Drive, One Drive ได้ทั้งหมด ดังนั้นไม่ต้องกังวลเรื่องการเชื่อมต่อกับไฟล์ที่มีอยู่แล้วในองค์กร ซึ่งสุดท้ายแล้วไม่จำเป็นต้องเลือกแค่ตัวใดตัวหนึ่ง อาจใช้ผสมกันก็ได้ตามความเหมาะสมของงาน จบส่วนของ Project Management Tools มาต่อกับ Tools อื่นๆ บ้าง

Slack

ตัวนี้เป็น Tools สำหรับใชัแทน Facebook Group, Email, Chat ต่างๆ สามารถพิมพ์ # เพื่อสร้าง tag ไว้แบ่งห้องสนทนาได้ โดยสมาชิกแต่ละคนจะสามารถเลือก follow tag ที่เกี่ยวข้องกับตนเองได้ เวลามีคนพิมพ์มาแล้วใส่ tag เช่น “#programmer #sale” คนสองกลุ่มนี้ก็จะเห็นทั้งคู่ ส่งเสริมประสิทธิภาพการทำงานได้อย่างดีเยี่ยม และมี API ให้เราเขียน bot ประจำออฟฟิศเวลาเกิด event ต่างๆ เพื่อแจ้งสมาชิกได้ทีมได้อีกด้วย เค้าว่า Slack มาช่วยดึงคนออกจาก Facebook Group ซึ่งหากบริษัทไหนใช้ Facebook Group อยู่ก็อาจโดน interrupt จากสิ่งต่างๆ ภายใน Facebook ได้ง่าย จึงแยก tools ตัวนี้ออกมาสำหรับด้านทำงานโดยเฉพาะ ส่วน Facebook เค้าอยากให้เอาไว้สำหรับเป็นพื้นที่ส่วนตัวอย่างเดียว ไม่มีเรื่องงานมาเกี่ยวข้อง

Sketch

เป็น Tools สำหรับช่วยออกแบบ UI ที่ดีเยี่ยม ใช้ง่ายมาก พี่ที่ทำ StockRadar บอกว่าขนาดตัวเองเป็นโปรแกรมเมอร์ยังใช้ Sketch ทำ UI ออกมาได้เร็วกว่า Designer ที่ใช้ Photoshop หรือโปรแกรมอื่นๆ ข้อเสียคือมันมีแต่บน Mac เท่านั้น

ทริคเล็กน้อยอื่นๆ

  • harvest ใช้ track เวลาที่ทำแต่ละ taskᅠ
  • quib สำหรับทำ story board
  • เค้าแนะนำให้ดู ted talk เรื่อง post it (ผมยังหา link ไม่เจอ)
  • line เหมาะกับคุย investor เพราะแสดงอารมณ์ได้ชัด ทำให้สนิทกันได้เร็วขึ้นᅠ
  • วิธีทำให้คนใช้ tools คือควรใช้ tools ที่เค้าคุ้นเคยก่อน แล้วค่อยๆ ปรับเปลี่ยนไปใช้ tools ที่ advance มากขึ้นเรื่อยๆ คนจะยอมรับง่ายขึ้นᅠและบอก impact ให้เห็นให้ชัด เพื่อสร้างเสริมความเข้าใจ
  • วิธีทำให้คนใช้ tools อีกวิธีคือให้คนที่มีอำนาจสูงสุดมาใช้ก่อนแล้วจะเกิดการโอนถ่ายข้อมูลจากระบบเก่ามาใช้ในระบบใหม่แล้วพอใช้ๆ ไปสักพัก บอกให้คนข้างล่างรายงานผ่านระบบ โดยที่หัวหน้าก็ monitor อยู่เรื่อยๆสักพักถึงจะมีคนใช้ตามครบ แล้วเกิดประโยชน์สูงสุด หลังจากนั้นหัวหน้าจะหายตัวไปก็ได้ ระบบก็จะรันของมันไปเองแล้ว
  • culture ถ้าเราไม่ manage มัน มันจะ manage เราᅠ
  • No blame culture เป็นสิ่งที่ควรทำ

ระบบคัมบัง (Kanban)

          Kanban ที่มาเริ่มต้นมาจากระบบการทำงานของ Toyota ซึ่งประสบความสำเร็จอย่างมากจนทำให้สามารถผลิตรถออกมาได้ไวกว่าคู่แข่งทั่วโลกจนครองตลาดไปได้มาก สำหรับวงการ Software ได้ถูก David J. Anderson จับนำมาปรับปรุงให้เข้ากับ Software Development เพื่อการพัฒนา Software ได้อย่างรวดเร็วที่สุดด้วยเช่นกัน และสุดท้ายถูกนำไปเป็นส่วนหนึ่งของ Lean Software Development รวมไปถึงถูกจัดให้เป็น Agile อีกแบบหนึ่งนอกเหนือไปจาก Scrum อีกด้วย
Kanban มีกฎอยู่แค่ 3 ข้อ (Scrum มี 9)
  1. Visualize the workflow – แสดง flow การทำงานของระบบให้ออกมาให้เห็นภาพอย่างชัดเจน สามารถบอกได้ว่าขณะนี้งานไปติดขัดที่จุดไหน อย่างไรให้ชัดเจน
  2. Limit Work In Progress (WIP) – จุดหลักของ Kanban เลยคือการ limit งานต่อหนึ่งหน่วยย่อย เช่นงานสำหรับ Development ห้ามถือเกิน 2 งานเพื่อป้องกันไม่ให้งาน Overload มากเกินไป และจะทำให้สูญเสียเวลาไปมากกว่าที่ควรจะเป็น
  3. Measure the lead time – วัดผลการทำงานและปรับปรุงให้ดียิ่งขึ้นไปอีก ตรงนี้จะเรียกว่า Cycle time หรือค่าเฉลี่ยที่ Card 1 อันจะอยู่บนบอร์ดตั้งแต่เริ่มต้นไปจนถึงขึ้นบน production จริง
ข้อดีของ Kanban
  1. เหมาะกับการทำงานหลายๆ project พร้อมกันมากกว่า Scrum
  2. เหมาะกับการทำงาน Maintain, Support ระบบแก้ bug ที่โผล่มาแบบปัจจุบันทันด่วนไปพร้อมๆ กับการพัฒนา feature มาก เพราะสามารถเปลี่ยนแปลงได้เกือบตลอดเวลา ไม่ต้องรอให้จบ sprint
  3. เหมาะกับทีมงานที่มี Specialist อยู่ในทีม และต้องการการ share resource จาก specialist คนนี้พร้อมๆ กัน โดยที่ไม่ทำให้ specialist คนนี้มีงาน overload เกินไป
  4. แน่นอน หากเป็นงาน backend, frontend แยกกันและไม่สามารถฝึกให้คนในทีมเขียนได้ทั้งสองอย่างพร้อมๆ กันได้ Kanban จะช่วยตรงจุดนี้ได้ในแง่การจัดการ flow เช่นงาน backend เสร็จแล้ว รอ frontend หยิบไปทำต่อ ในขณะที่ backend ก็ทำงานใหม่หลังจากส่งงานต่อให้ frontend แล้วทันที ทำให้ไม่มีการว่างงานเกิดขึ้น
  5. หากงานใหญ่ไม่สามารถซอยให้เล็กลงได้แล้วจริงๆ ก็ไม่ใช่ปัญหาสำหรับ Kanban เพราะไม่มี sprint เป็นตัวจำกัดอีกแล้ว
  6. เสริมสร้างความช่วยเหลือระหว่างคนในทีม เนื่องจากแค่มองบอร์ดจะรู้ทันทีว่าตอนนี้งานติดอยู่ที่ใครมากที่สุด (เป็น bottleneck ของ flow ในขณะนั้น) เพื่อนร่วมงานที่เหลือก็จะเข้าไปช่วยกัน เพื่อทำให้ bottleneck ของงานหายไปโดยเร็วที่สุด และสุดท้ายจะสามารถทำงานงาน flow ต่อไปได้ ทำให้งานโดยภาพรวมเสร็จสิ้นมากขึ้น
  7. ช่วยแก้ปัญหา “ทำงานโน่นนิด นี่หน่อย เยอะมาก แต่ไม่เสร็จซักกะงาน” ได้เป็นอย่างดี ด้วย WIP