วันพุธที่ 11 มกราคม พ.ศ. 2560
วางทฤษฎีที่เรียนมาเอาไว้ แล้วลองอ่านตรงนี้ดูว่า API ที่ดีควรมีอะไรบ้าง
แค่อยากแชร์ให้ดูว่าการเขียน API ที่ดีนั้นควรทำไงมั้ง เพราะผมก็ทำงานตรงกับ CR ส่วนใหญ่เป็นเราการสร้าง web service เพราะให้ front-end แอปมาคิวรี่เอาข้อมูลไปใช้งานต่อ
วางทฤษฎีที่เรียนมาเอาไว้ แล้วลองอ่านตรงนี้ดูว่า API ที่ดีควรมีอะไรบ้าง
1 Authentication อย่าเพียว เดียวเสียวสันหลัง บอกเลยก็เอา API ขึ้น public ควรมีการใส่รหัส พาส หรือ special charecter ที่ทำให้รู้ว่า call service จากที่ไหน เราจะได้ track ได้ ทั้งเรื่องจำนวนคนใช้ เรียกจาก app ไหน ไม่งั้นดูแลระบบยาก อีกทั้งยังเป็นการป้องกัน hacker ที่จ้องล้วงข้อมูลระดับหนึ่ง
2 Away-On กล่าวคือถึงแม้ API จะแหล่ว(จะพัง) ภายในตัว API เองเกิด error ขึ้นก็ควร return กลับมาได้ทุก request เพราะอะไรนะหรือ เพราะฝั่ง client จะได้รู้ไงว่าตวรตัดสินใจทำอะไรต่อ เช่น บอกผู้ใช้ให้ลองกดใหม่ หรือ บอกให้รีเฟรชเพื่อดูผล เป็นต้น เคยทำงานกับทีมเมกัน แม่ง return Empty string กลับมา ใครจะไปรู้ว่ะ ว่า request นั้น success หรือ fail
3 Suck Data Handler มีแต่พวกกากๆเท่านั้นแหละที่คิดว่าการเรียก API ต้องใส่ตัวแปรที่ถูกต้องเสมอ อย่าลืมว่า requirement เปลี่ยน โค๊ดเปลี่ยน การสร้าง request data ก็ต้องเปลี่ยน เช่น บอกว่า API รับค่าราคาเป็นตัวเลข เเล้วมีความต้องการลูกค้าใหม่เข้ามา ว่าให้รับได้ทุกสกุลเงิน เพราะเริ่มปั้น request ใหม่ให้จาก { "price" : "120" } เป็น { "price" : "120THB"} ตัว api เองต้องรับได้ ถ้ากรอกสกุลเงินผิด ก็ต้องไม่ error 500 ตัวเหลืองเป็นดีซ่าน เคยทำงานกับทีมเมกัน(หรือ สิงค์โปร นี้แหละลืม) มันรับค่า datetime เป็น format แปลกมาก \T20160101992\ เป็นต้น คือทำให้โอกาสพังเยอะมาก เพราะเค้าวาง business logic ของการ convert ไว้ท่ front-end
4 Friendly API ทำอะไรบอกกันด้วย เวลาเรียก Update ข้อมูล ก็ช่วยบอกด้วยว่าสำเร็จไหม ไม่ใช่หายไปเลย เเล้วให้เราคิดไปเอง จะเป็นวิธีไหนก็ได้ เช่น
- HTTP HEADER Status : 200 ok , 500 error , 404 not found
- JSON { "result" : "success" , "receipt" : "pay00001" } เป็นต้น
เอาสักอย่างที่ทำให้งาน front-end ง่ายขึ้น เคยเล่น API คนมาเลย์ เเม่งเรียกฟังชั่นเเล้วหายไปเลย ผมก็งงดิ เรียกซ้ำอีกทีก็เงียบ สุดท้ายเช็คไปเช็คมา ที่ฝั่งนั้น data duplicate เพราะโดน insert ซ้ำๆหลายรอบ เเม่งฮา database ตัวเองยังไม่เช็ค data ก่อนใส่เข้าเรคคอร์ดเลย #กุมขมับ
สี่ข้อพอ ทำได้ก็ถือว่าแข็งเเล้วแหละ
ไม่แปลกใจเลยกับเว็บรัฐบาล SQL Injection กับกรมสรรพกร
แค่เข้าไปค้นหาโรงเรียนที่อยู่ในรายชื่อบริจาคแล้วได้สิทธิลดหย่อน ดันลืมเปลี่ยนภาษาเลยกรอกชื่อโรงเรียนผิด
แล้วดันทะลึ่งไปเจอบัคอีก
ยุคนี้ SQL Injection ยังมีอยู่จริง ตามรูป
พอหอมปาก หอมคอ ไม่ไปต่อ เดี๋ยวโดน
ไม่ได้ทำอะไรเลยนะ อย่างน้อย INFORMATION_SCHEMA.Tables ก็ lock permission ไว้
พอๆๆๆ
แล้วดันทะลึ่งไปเจอบัคอีก
ยุคนี้ SQL Injection ยังมีอยู่จริง ตามรูป
พอหอมปาก หอมคอ ไม่ไปต่อ เดี๋ยวโดน
ไม่ได้ทำอะไรเลยนะ อย่างน้อย INFORMATION_SCHEMA.Tables ก็ lock permission ไว้
พอๆๆๆ
วันพุธที่ 23 พฤศจิกายน พ.ศ. 2559
Debug PHP Code ด้วย VS Code 2016 ของฟรีและดีงามจาก Microsoft
โหลดก่อนเลย!
คุณสามารถดาว์วโหลด VS Code ลงมาใช้งานได้ฟรี ที่หน้าหลัก Microsoft ลิงค์นี้
https://code.visualstudio.com
แล้ว install กด Next เรื่อยจน install เสร็จสิ้น
การ Config PHP Debugger
ก่อนอื่นเช็คไฟล์ php.ini กันสักนิดว่าพร้อมสำหรับ Debug หรือยัง โดยผมใช้ XDebug เข้าไปตั้งค่าตามนี้
XAMPP Stack :
1. แก้ไฟล์ c:/xampp/php/php.ini ถ้ายังไม่มีโค๊ดข้างล่าง ให้เพิ่มดังนี้
[XDebug]
zend_extension="C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_host=localhost
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
xdebug.remote_port=9000
xdebug.remote_autostart = 1
2. เช็คดูว่าไฟล์ php_xdebug.dll อยู่ที่ directory ที่คุณลง xampp จริง
3. ตั้งค่า port 9000
4. ตั้งค่า xdebug.remote_enable เป็น 1
การ Config VS Code ให้มี PHP Debugger
1. เข้า command palette ไปที่ view > command palette หรือ ctrl + shift + p
2. พิมพ์ ext install
3. ค้นคำว่า php debug
4. กด install แล้ว restart VS Code ใหม่
5. ไปที่ file > preferrence > user settings ใส่ค่านี้ลงไปข้างใน ปีกกา {}
"php.validate.executablePath": "C:/xampp/php/php.exe"
มาเริ่ม Debug กัน
1. เปิด project test ขึ้นมา โดยคลิกรูปกระดาษสองแผ่นที่เมนูด้าานซ้าย
2. เปิด debug mode โดยเลือกที่รูปแมลงด้านซ้าย
3. คลิกปุ่มฟังเฟืองเพื่อ setting เเล้วเลือ PHP สังเกตว่า port เป็น 9000 แล้ว save
4. run ปุ่มสามเหลื่ยมเขียวๆ
5. เข้า browser เเล้วไปที่ project test : localhost/test/test.php
อันนี้ ไฟล์ test.php ของผม
<?php
echo "test page for vs code + PHP";
$test = 1;
$testArray = array('test1', 'test2');
foreach ($testArray as $key => $value) {
echo $value.'<br/>';
}
?>
6. ทำ break point ไว้เพียงเท่านี้ code ของท่านก็สามารถ watch ค่าตัวแปรได้เเล้ว ดังรูป
เป็นอันจบครับ Open Source จงเจริญ!
วันพุธที่ 10 สิงหาคม พ.ศ. 2559
เล่น Pokemon Go บนคอม วิ่งในเกมส์ 10 km แบบไม่ต้องลุกจากที่นั่ง !!
***เพิ่มเติม : ปัจจุบันผมเลิกเล่นผ่าน emulator เเล้วนะครับ บทความนี้กลายเป็นอดีตไปละ เพราะความสนุกจริงๆคือการเดินเล่น เเละพบปะผู้คนจริงๆ ไปละวันนี้ EXP คูณสอง
กระแสแรงจริงๆกับ Poemon Go หลังจากเปิดตัวในประเทศไทยเมื่อสัปดาห์ที่แล้ว ตอนนี้ไม่ว่าจะเดินไปทางไหนก็เจอเหล่าโปเกมอนมาสเตอร์ ไล่จับโปเกมอนกันทุกหย่อมหญ้า ผมก็หนึ่งในนั้นแต่เล่นบนมือถือไม่ถนัดจริงๆ เลยเล่นบนคอมแทนครับ
STEP 1 : Download bluestacks2 Native 5 ได้ทั้งเว่อชั่นภาษาไทยหรือภาษาอังกฤษ
http://www.bluestacks.com/ ล่าสุดเวอร์ชั่นปัจจุบัน แถม FakeGPS มาให้เลยทันที
STEP 2 : Download KingRoot แล้วจัดการ Root BlueStack ซะ
STEP 3 : ถ้าโหลดมาเเล้วไม่มี Fake GPS มาให้ ก็ต้องลงเองครับ (ถ้ามีแล้วข้ามไป step 5) โหลด Lucky Patcher จากตรงนี้ คลิกไอคอน apk จากเมนูทางซ้าย เลือกไฟล์ LuckyPatcher.apk รอจน install สำเร็จ กดไอคอนฟันเฟืองมุมขวาบน > Updaate Android Plugin รอจนกว่าจะเสร็จ
STEP 4 : เปิด Lucky Patcher ขึ้นมากด add/install ที่เมนูข้างล่าง เลือก SD card > windows > BlueStackFile > FakeGps.apk หลัง install เสร็จถ้ามันถามว่าจะ restart ไหม ไม่ต้องตอบ กดไอคอนฟันเฟืองมุมขวาบน > Updaate Android Plugin รอจนกว่าจะเสร็จ
STEP 5 : ไปที่ start > search > ค้นคำว่า privacy location กด change > เลือก off ให้หมดทั้ง 2 ตัว
STEP 6 : cmd > regedit > LOCAlMechine > software > bluestack > camera เลือก decimal เเล้สใส่ค่า 0 ลงไป
STEP 7 : กลับมาที่ BlueStack กด setting > location > google location history ถ้าเข้าไม่ได้ เเสดงว่ามาถูกทางเเล้ว เปิด fake gps เเล้วทดลอง ค้นคำว่า "BTS เอกมัย" pin มันตรงนั้นแหละ เเล้วกด ลูกศรสีส้มด้านล่าง ถ้า windows 10 ฟ้องมาว่ามีการ update locaiton แสดงว่าสำเร็จไป 90% เเล้ว
STEP 8 : ลง Pokemon Go โลด ปล. อย่าลืมไป add google account ก่อนเล่น หลังจาก login เข้าตัวเกมส์สำเร็จเปิด locaton ที่ไอคอนหมุดทางซ้ายยมือ เลือกตำแหนงตามใจชอบ กด faorite ตรงจุดนั้นไว้ก็ได้ เเล้วกดปุ่มส้ม กลับมาใน pokemon go แผนที่จะขึ้นแล้ว เล่นได้เลย
STEP 9 : สนุกกับเกมส์
*** ถ้า pokemon ไม่เกิด คุณเดินไวไป เปลี่ยนตำแหน่งไกลเกิน ออกเกมส์เข้าใหม่ / รอ
*** ตอนจับ pokemon ให้ปิด AR mode
*** ถ้ากด wasd เพื่อเดินไม่ได้ ให้pin ตำแหน่งอีกที เเล้วกดไอคอนฟันเฟืองมุมขวาบน > Updaate Android Plugin รอจนกว่าจะเสร็จ
ฟังดูอาจเหมือนขี้โกง แต่มีก็มีข้อดีครับ อย่างเเรกเลยเวลาว่างของคนทั่วๆไปก็คือหลังเรียน หลังเลิกงาน ซึ่งมันก็ดึกแล้วจะให้ไปเดินดุ่มๆสามาสี่ทุ่มก็อันตราย เล่นหน้าจอคอมที่บ้านปลอดภัยกว่า สองคือมันคือเกมส์! บางจุดอันตรายจนเกิดเหตุอาญชญากรรม โอเคเกมส์มันดี เเต่ถ้ากำหนดให้เล่นเฉพาะจุดสาธารณะที่ปลอดภัยไม่ได้ ผมเลือกเล่นหน้าคอมดีกว่า
วันอาทิตย์ที่ 20 ธันวาคม พ.ศ. 2558
แก้ HOSTS ไฟล์ เพื่อบล็อกเว็บไม่เหมาะสม
ขออธิบายความรู้ domain name เกริ่นนิดหน่อยก่อนนะครับ ในการเข้าเว็บไซด์เเต่ละครั้ง(หลังจากพิมพ์ URL แล้วกดปุ่ม Enter) เราจะวิ้งไปที่ name server หลักของเเต่ละโซนแต่ละประเทศเพื่อไปแปลงจากชื่อโดเมนเป็นเลข IP Address เพื่อให้คอมพิวเตอร์เข้าใจ เช่น google --> 203.146.98.27
แล้วถ้าเราใช้โดเมนเเค่ในองค์กรเพียงอย่างเดียวหล่ะ ไม่จำเป็นต้องไปจดโดเมนเนมให้เสียตัง เสียเวลา เพราะเราสามารถแก้ไป host ไฟล์บนเครื่อง PC ของเราเองสำหรับจำลองชื่อโดเมนได้ตามใจ เช่น http://localhost ให้วิ่งไปที่เว็บหลักของบริษัท ซึ่งเราสามารถสร้างชื่อที่จำง่ายๆ ไม่ยาว เช่น http://test , http://account , http://HR เป็นต้น
เริ่มกันเลย เรียก RUN ขึ้นมาเเล้วพิมพ์ "notepad C:\Windows\System32\Drivers\etc\hosts"
เมื่อเปิดไฟล์ขึ้นมาจะได้หน้าตา ประมาณนี้ครับ
203.146.98.27 googl --> (เป็น short link สำหรับเข้า Google เร็วๆ)
หลังจากนั้นกด save ไฟล์เเล้วไปที่หน้า Browser แล้วทดลองพิมพ์ http://googl/ แล้วจะพบว่าโดเมนนี้สามารถวิ่งตรงไปยังกูเกิ้ลได้สะบายๆ
ประยุคมาใช้ Block เว็บที่ไม่ต้องการ โดยการหลอกให้เว็บที่ไม่ต้องการวิ่งเข้า loopback ip ซึ่งไม่มีอยู่จริง ถ้าเข้าไปจะพบว่าไม่พบหน้าเว็บหรือ 404 not found สมมุติผมอยาก block เว็บ yahoo ก็เพิ่มบรรทัดนี้ลงไปที่ท้ายสุดของไฟล์
127.0.0.1 www.yahoo.com
เพียงเท่านี้ เว็บ Yahoo ก็ไม่สามารถเข้าได้อีกต่อไป ไปลองทำดูกันครับ บาย
สุดท้ายอย่าลืม backup ก่อนเเก้นะครับ แล้วจะหาว่าไม่เตือน
แล้วถ้าเราใช้โดเมนเเค่ในองค์กรเพียงอย่างเดียวหล่ะ ไม่จำเป็นต้องไปจดโดเมนเนมให้เสียตัง เสียเวลา เพราะเราสามารถแก้ไป host ไฟล์บนเครื่อง PC ของเราเองสำหรับจำลองชื่อโดเมนได้ตามใจ เช่น http://localhost ให้วิ่งไปที่เว็บหลักของบริษัท ซึ่งเราสามารถสร้างชื่อที่จำง่ายๆ ไม่ยาว เช่น http://test , http://account , http://HR เป็นต้น
เริ่มกันเลย เรียก RUN ขึ้นมาเเล้วพิมพ์ "notepad C:\Windows\System32\Drivers\etc\hosts"
เมื่อเปิดไฟล์ขึ้นมาจะได้หน้าตา ประมาณนี้ครับ
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least
one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
ให้ต่อท้ายบรรทัด โดยเพิ่ม ip addres ตามด้วย tab แล้วพิมพ์ชื่อ โดเมนที่ชอบลงไปเช่น203.146.98.27 googl --> (เป็น short link สำหรับเข้า Google เร็วๆ)
หลังจากนั้นกด save ไฟล์เเล้วไปที่หน้า Browser แล้วทดลองพิมพ์ http://googl/ แล้วจะพบว่าโดเมนนี้สามารถวิ่งตรงไปยังกูเกิ้ลได้สะบายๆ
ประยุคมาใช้ Block เว็บที่ไม่ต้องการ โดยการหลอกให้เว็บที่ไม่ต้องการวิ่งเข้า loopback ip ซึ่งไม่มีอยู่จริง ถ้าเข้าไปจะพบว่าไม่พบหน้าเว็บหรือ 404 not found สมมุติผมอยาก block เว็บ yahoo ก็เพิ่มบรรทัดนี้ลงไปที่ท้ายสุดของไฟล์
127.0.0.1 www.yahoo.com
เพียงเท่านี้ เว็บ Yahoo ก็ไม่สามารถเข้าได้อีกต่อไป ไปลองทำดูกันครับ บาย
สุดท้ายอย่าลืม backup ก่อนเเก้นะครับ แล้วจะหาว่าไม่เตือน
วันพุธที่ 7 ตุลาคม พ.ศ. 2558
จัดระเบียบ SQL Query ให้อ่านง่ายๆสบายตา DEV ด้วย ApexSQL
สำหรับท่านที่ต้องใช้งาน MSSMS อยู่เป็นประจำน่าจะเจอปัญหาคล้ายๆกับผมคือ "เวลาแก้ store procedure จะเจอกับโค๊ดเทพที่ยุ่งเหยิง วุ่นวาย ไม่ได้ใส่ UPPER CASE บ้าง ย่อหน้าอ่านยากบ้าง" ซึ่งมันบั่นทอนกำลังให้การแก้เป็นอย่างมาก วันนี้ผมมาแนะนำ Free Plugin ที่จะทำให้โค๊ดอ่านง่ายยิ่งขึ้น ลุยเลย
ไปโหลดปลั้กอินจากหน้า https://www.apexsql.com/Download.aspx แล้วเลือกตัว ApexSQL Refactor ซึ่งเป็น Free Tool ให้โหลดฟรีไม่คิดค่าใช้จ่าย จากนั้น Install ให้สมบูรณ์แล้ว restart MSSMS อีกครั้งหนึ่ง จะเห็นเมนูเพิ่มขึ้นมาที่มุมซ้ายบน
มีอยู่ 4 เมนูให้เลือกคือ
- Default
- Compact
- Extended
- MSDN SQL BOL ถ้าชอบเดียวกับ doc บน MSDN ให้เลือกแบบนี้ครับ
สำหรับผม ชอบแบบสุดท้ายที่สุดเพราะมันจะกระจาย SELECT ที่เจอไปบรรทัดใหม่ และแบ่ง Where Clause Condition ไปบรรทัดใหม่เช่นเดียวกัน แต่ถ้าเลือกเเบบ Compact จะขึ้นบรรทัดใหม่เฉพาะตัวที่เป็น QUERY หลักซึ่งคิวรี่ที่เหลือจะยาวเสียจนทะลุบรรทัด แต่ดูเป็นระบบกว่าแม้จะไม่ค่อยสะอาดตาสักเท่าไหร่
มาดูตัวอย่าง ก่อนจัดระเบียบ
หลังจัดระเบียบ
วันพฤหัสบดีที่ 1 ตุลาคม พ.ศ. 2558
เทคนิคง่ายๆในการแสดงข้อมูลประเภทการเงิน การบัญชี ใน SQL SERVER
ในเรื่องเงินๆทองๆ หน่วยที่น้อยที่สุดคือ 1 สตางค์ (ทศนิยมสองตำแหน่งจะได้ 0.01) และ SQL SERVER ได้สร้างประเภทข้อมูลทางราคาไว้ให้ใช้งานง่ายๆแล้วคือ DECIMAL แต่การคำนวนจริงๆได้ข้อมูลที่ละเอียดกว่า 2 ตำแหน่งอยู่แล้ว ตัวอย่างง่ายๆก็เช่น อยากได้ค่าภาษี(6.3%) กับสินค้า 1295 บาท จะได้ 81.585 คำถามคือ 0.005 ที่เกินมาเราจะทำยังไง
ปล.ตอนรับเรทภาษีมูลค่าเพิ่มใหม่จาก 7% เป็น 6.3% ที่เริ่ม 1 ตุลานี้ เลยเขียนบทความนี้เป็นตัวอย่างซะเลย
เราก็จะปัดขึ้นหรือปัดลงตามปกติ แต่เมื่อสินค้ามีเพิ่มเป็นร้อย เป็นพันชิ้น มันจะเริ่มเห็นความเเตกต่างของเงินที่คำนวนได้ ก็เงินที่จ่ายจริงๆ ในภาษาโปรแกรมเราสามารถเก็บค่าก่อนปัดเศษเพิ่อเอาไว้คำนวนต่อมีฟังชั่นประมาณนี้
ROUND() คือการปัดขึ้นถ้าเศษสุดท้ายมากกว่า 5 และปัดลงถ้าเศษน้อยกว่า 5 สามารถกำหนดความละเอียดของตำแหน่งทศนิยมได้
SELECT ROUND(81.585, 3, 2)
-- 81.585
แล้วยังกำหนดความละเอียดของหลักที่จะเริ่มปัดได้ เช่น
SELECT ROUND(81.585, 2)
-- 81.590
FLOOR() คือการปัดลงทุกกรณี
SELECT FLOOR(81.585)
-- 81
CEILING() คือการปัดขึ้นทุกกรณี
SELECT CEILING(81.585)
-- 82
อีกเทคนิคหนึ่งคือการ CAST หรือการเปลี่ยน TYPE ของตัวเลขซะเลย ซึ่งจริงๆแล้วมันคือการ ROUND() ก่อน CAST() เช่น
SELECT CAST( 0.0453 AS DECIMAL(10,2))
--0.05
*จะเห็นว่าเศษโดนปัดก่อนแปลงเป็นทศนิยม 2 หลัก
ถ้าคุณเขียนโปรแกรมเกี่ยวกับฟังชั่นคำนวนบัญชีคงจะมีประโยชน์อยู่ไม่น้อย เพราะงานเหล่านี้ทุกทศนิยมต้องเปะๆเท่ากัน ห้ามมีตกหล่น แล้วการปัดเศษง่ายๆนี้แหละที่ทำให้พลาดกัน
สมัครสมาชิก:
บทความ (Atom)












