Cloud สำหรับ Non-techs

Screen Shot 2560-09-02 at 5.53.39 PM.png

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

Cloud Computing การประมวลผลแบบก้อนเมฆคืออะไร ?

ก่อนจะไปถึงตรงนั้น เราต้องท้าวความกันก่อนเลยครับ

รู้จักกับการประมวลผล

ในเครื่องคอมพิวเตอร์หรือโทรศัพท์มือถือนั้นจะมีอุปกรณ์และวงจรเล็กๆเต็มไปหมด แต่ส่วนที่ใช้ประมวลผลนั้นเรียกว่า CPU หรือ Processor ซึ่งถึงเปรียบเทียบได้กับสมองของคนเรา  (หมายความว่ายิ่ง CPU ยิ่งดีและราคาแพง ยิ่งทำงานได้ดีและเร็วขึ้น)

i

การประมวลผล (Computing) นั้นก็คือการนำข้อมูลต่างๆใส่ระบบคอมพิวเตอร์ เพื่อที่จะให้ CPU ทำงานตามคำสั่งของโปรแกรมโดยที่โปรแกรมเมอร์(Programmer) เป็นคนเขียนใส่คำสั่งเหล่านี้
.
.
ยกตัวอย่างเช่น “เครื่องคิดเลข” ที่ถือว่าเป็นคอมพิวเตอร์เหมือนกัน โดยที่มันถูกติดตั้งโปรแกรมคิดเลขมาอยู่ในเครื่อง เมื่อเรากดตัวเลขและคำสั่ง บวก ลบ ก็จะเป็นการส่งข้อมูลเพื่อให้ CPU ไปประมวลผลแล้วก็ส่งผลลัพธ์กลับมาที่หน้าจอ

รูปจาก http://www.bbc.co.uk/staticarchive/e45e9a229d416394b2f1e16dd7f13689b46c20ca.png

ซึ่งโดยทั่วๆไปแล้วพวกเราที่ใช้คอมพิวเตอร์เนี่ยไม่ต้องใช้งานการประมวลผลหนักๆมากนักเราเลยใช้คอมพิวเตอร์กันแบบที่เรียกว่า PC ซึ่งย่อมาจาก Personal Computer หรือ คอมพิวเตอร์ส่วนบุคคล

PC กับ Server

ทีนี้ถ้าสมมุติว่าเราอยากมีเว็ปไซต์เป็นของตัวเอง ซึ่งจะแตกต่างจากการเปิดคอมพิวเตอร์ใช้ทำงานเอง เพราะเราจะต้องเปิดระบบเครือข่ายให้คนอื่นๆมาดูเว็บไซต์ของเราได้ ซึ่งแน่นอนว่าเครื่องคอมพิวเตอร์นี้จะต้องเปิดทิ้งไว้ตลอดเวลา ขั้นตอนนี้ต้องอาศัยคอมพิวเตอร์ประเภทหนึ่งที่เรียกว่าเซิร์ฟเวอร์ (Server)

Server คือ คอมพิวเตอร์ที่เปิดระบบให้คอมพิวเตอร์เครื่องอื่นๆไม่ว่าจะเป็น PC หรือ Server เครื่องอื่นๆมาเชื่อมต่อได้เพื่อขอดูหรือจัดเก็บข้อมูล

.
.
เช่นรูปด้านล่างนี้จะเป็นการเชื่อมต่อของ Client ซึ่งแปลว่าเครื่องลูกๆ เช่นพวกคอมพิวเตอร์ PC ทั่วๆไปหลายๆเครื่องกำลังเชื่อมต่อกับเครื่อง Server (เครื่องแม่) เพียงเครื่องเดียว

รูปจาก https://www.kullabs.com/uploads/client-server.png

โดยทั่วๆไปแล้วนั้นเราก็มีทางเลือก 2 ทางใหญ่ๆในการติดตั้ง Server

  1. เอา PC มาทำเป็น Server
  2. เครื่องคอมพิวเตอร์สำหรับการเป็น Server โดยเฉพาะ ซึ่งราคาจะแพงกว่าเครื่อง PC เนื่องจากว่าอุปกรณ์ต่างๆจะมีคุณภาพสูงกว่าและรองรับการใช้งานที่ต้องเปิดเครื่องทิ้งไว้ตลอดเวลาเป็นเวลาหลายๆปีได้ดีกว่า

เมื่อระบบใหญ่ขึ้น

มาถึงตรงนี้ทุกคนก็จะรู้แล้วว่า เครื่อง Server หนึ่งเครื่องนั้นอาจจะสามารถรองรับการเชื่อมต่อของเครื่องลูกๆได้หลายเครื่องพร้อมกัน
ถ้า Server หนึ่งเครื่องรองรับลูกค้าได้ 100 คน แล้วถ้าลูกค้าเราเพิ่มเป็น 3,000 คนล่ะ ระบบของเราก็ต้องใหญ่ขึ้น 30 เท่าเลยทีเดียว ก็ทำให้เราต้องมีการติดตั้ง Server เพิ่มมากขึ้นเช่นกัน ตรงนี้ก็อาจจะต้องทำมีค่าใช้จ่ายในการดูแลมากขึ้นทั้งค่าไฟ ค่าแอร์ ค่าซ่อมอุปกรณ์  รวมถึงพื้นที่ที่จะเอาไว้ติดตั้งด้วย
.
.
จนถึงกระทั่งอาจจะต้องทำห้องสำหรับติดตั้ง Server กันเลย (ซึ่งถ้าเรียกทับศัพท์ก็มีหลายๆคำที่มีความหมายเดียวกัน Server Room, Server Lab, Server Farm หรือ Data Center – ศูนย์ข้อมูล ) ซึ่งจะมีเครื่อง Server หลายสิบ ร้อย พัน เครื่องเลยทีเดียว

รูปจาก https://www.bournehosting.com/images/image2.jpg

เพราะ Server แพงเรามาแชร์กันดีกว่า

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

ในที่สุดก็เข้าเรื่อง Cloud

ถ้าเปรียบเทียบกันแล้ว Cloud ก็คือคอนโดที่มีตึกอยู่มากมายทั่วโลก เราสามารถที่จะเช่าเพื่อที่จะใช้งานให้สามารถตอบสนองผู้ใช้ระบบของเราได้(เกือบ)ทั่วโลกเช่นกัน
.
ยกตัวอย่างเช่น ถ้าเรามี Server ที่ตั้งอยู่ที่ไทยเพื่อให้บริการข้อมูลของบริษัท แต่ลูกค้าอยู่ที่อเมริกา ซึ่งการที่เค้าจะมาดูข้อมูลได้นั้นจะต้องผ่านระบบเชื่อมต่อหลายขั้นมากกว่าจะมาถึง Server ของเรา จึงทำให้เกิดความล่าช้า แล้วยิ่งถ้าเป็นข้อมูลที่ต้องดูแบบ ณ เวลานั้น (Realtime) ก็ยิ่งเป็นเรื่องใหญ่
.
ดังนั้นการมีระบบอยู่กระจายทั่วโลกนั้นเป็นการเพิ่มประสบการณ์ผู้ใช้ที่ดีกว่า แต่ถ้าเป็นสมัยก่อน เราจะไปตั้ง Server ที่อเมริกาจะทำได้ง่ายๆรึเปล่านะ(?)

global_infrastructure_v25_7-19-17

แผนที่ศูนย์ข้อมูลของ AWS ซึ่งเป็นผู้ให้บริการ Cloud เจ้าใหญ่ที่สุด ณ เวลานี้

ผู้ให้บริการ Cloud นั้นทำหน้าที่คือสร้าง Data Center ทั่วโลก รวมถึงดูแลรักษาและสร้างระบบเครือข่าย ซึ่งมีรายได้มาจากการให้เช่า ซึ่งผู้ให้บริการรายใหญ่ตอนนี้ก็คือ Amazone Web Services (AWS), Microsoft Azure และ Google Cloud
.
ผู้ใช้บริการ Cloud ก็เหมือนเป็นผู้เช่าที่จ่ายเงินเมื่อต้องการใช้ระบบซึ่งถ้าเลิกใช้ก็ไม่จำเป็นต้องจ่ายต่อ ซึ่งปัจจุบันก็จ่ายกันผ่านบัตรเครดิต
.
ความยิ่งใหญ่ของ Cloud
ในวันนี้ก็คือมันมีระบบกระจายอยู่ทั่วโลก ซึ่งถ้าหากเราต้องการเก็บข้อมูลหรือให้บริการข้อมูลลูกค้าทั้งโลกนั้นการสร้าง Data Center หรือ Server เองนั้นยิ่งเป็นไปได้ยาก ถ้าเทียบการใช้บริการ Cloud ของรายใหญ่ ซึ่งก็จะทำให้ธุรกิจของเรานั้นสามารถตอบโจทย์ลูกค้าได้รวดเร็วทั่วทั้งโลกได้ดียิ่งขึ้น เพราะเราสามารถเช่าและเข้าใช้ระบบได้ในทันที! ซึ่งการที่มันมีระบบคอมพิวเตอร์กระจายตัวอยู่ทั่วโลกก็เปรียบได้กับกลุ่มเมฆที่ครอบคลุมทุกพื้นที่ทั่วโลก

…และนิทานเรื่อง Cloud Computing ก็จบลงเท่านี้ 🙂

Advertisements

รู้จักกับ HTTP2 Server Push

ในโลกของ Web นั้น ทุกๆครั้งที่ทางฝั่ง Client หรือ Browser ทำการขอข้อมูลด้วยนั้นจะใช้ HTTP Request ซึ่งการ Request หนึ่งครั้งนั้นมันมี Cost ของมันอยู่โดยเฉพาะการทำ Network Negociation ที่จะต้องมีในทุกๆครั้งที่ทำ HTTP Request

พื้นฐานกันหน่อย

ทีนี้มาลองดูตัวอย่างเช่น มีเวปเล็กๆ 1 เวปที่มี

  • index.html
  • style.css
  • font.woff2

ถ้าหน้า index.html นั้นมีการใช้ทั้ง style.css และ font.woff2 เวลาที่ถูกโหลดหน้า index.html หนึ่งครั้งนั้นจะเกิด HTTP Request 3 ครั้งและมีการทำ Network negociation 3 ครั้งเช่นกัน ซึ่งก็คือจะเกิด 3 Round Trip (ซึ่งกระบวนการเริ่ม Request จนได้รับ Response นั้นเรียกว่า Round Trip) ซึ่งจุดนี้แหละครับที่ HTTP2 Push นั้นจะมาช่วยเพิ่ม Performance ของการโหลดเวปได้

แล้ว Round Trip มันสำคัญยังไง

มันสำคัญแน่นอนครับ เพราะมันมีผลโดยตรงต่อเวลาที่ใช้ในการแสดงผลของหน้าเวป ซึ่งเราจะดูเวลาที่ใช้ไปได้จาก Debugging Tool เช่น

Screen Shot 2559-12-10 at 9.56.08 AM.png
Network Tab จาก Chrome Debugger

จากรูปจะเห็นได้ว่าการทำ HTTP request 1 ครั้งนั้นจะมี Connection Setup รวมไปถึงเวลาที่ใช้ส่ง Request จนฝั่ง Server ได้รับก่อนจะเริ่มประมวลผลและส่งข้อมูลกลับ

ซึ่งจะเห็นได้ว่าทุก Round Trip นั้นมี ค่าใช้จ่ายของ overhead ที่ต้องเสียไป ซึ่งบางคนอาจจะดูแล้วเหมือนไม่เยอะเพราะมันแค่หลัก milli-sec แต่ถ้าเวปเริ่มซับซ้อนมันรวมๆกันก็เยอะนะครับอาจจะเป็นหลายวินาทีเลย

HTTP2 Server Push?

สรุปสั้นๆก็คือเป็นเป็นความสามารถของ HTTP2 ที่จะช่วยลด Round Trip ในการส่งข้อมูลจาก Server ไปให้ Client โดยการ Push ข้อมูลไปให้ Client โดยที่ฝั่ง Client นั้นไม่ต้องทำการ Request มาหา Server (เหมือนยัดเยียดให้นั่นแหละ)

มาดูภาพประกอบเพื่อเพิ่มความเข้าใจกัน

1_pushintro
รูปจาก  http://calendar.perfplanet.com/2016/http2-push-the-details/

จากรูปด้านบนนั้นเราแบ่ง design ออกเป็น 3 แบบ

  1. no push ซึ่งก็เป็นการ Request/Response ตามปกติซึ่งจะทำให้เกิด 3 Round Trip ตามหลักปกติของ HTTP
  2. push critical เป็น design ที่เริ่มการ Utilize ความสามารถของ push ในการที่เราเน้นแต่ resouce ที่จำเป็นเช่น โหลด html ก็แถม css ไปให้ด้วยเลย
  3. push everything เป็นอีกรูปแบบที่ทางฝั่ง Client นั้นแค่ request มาทีเดียวทาง server ก็ส่งสิ่งที่ขอมาพร้อมกับแถมทุกอย่างไปให้ client ซึ่งเป็นการประหยัด Round Trip กันแบบสุดๆ

มาถึงตรงนี้ดูแล้ว Push นี่ดูดีใช่มั้ยครับ

แต่ช้าก่อนสิ่งเหล่านี้จำเป็นต้องคิดเพิ่มว่าจะ PUSH ดีรึเปล่า

  • Cached ข้อมูลบางอย่างอาจจะมีการ Cached เอาไว้แล้วที่ Client ซึ่งถ้า Server ทำการ Push ไปให้ด้วยตลอดเวลาก็เหมือนกับว่าเป็นส่งของฟรีเสียทั้งเวลา, CPU, bandwidth เล่นๆ
  • Bandwidth เนื่องจากขนาดของ Bandwidth นั้นจำกัดซึ่งการ Push ข้อมูลไปที่ Client ทีละเยอะๆนั้นอาจจะทำให้เครื่องของ Client ช้าลงได้ซึ่งก็มีผลกระทบต่อการใช้งานของ User
  • Priority ทางฝั่ง Server ต้องคำนึงถึงการเรียง Priority ของสิ่งที่จะ Push ดีๆเช่นจะส่งรูป หรือ Script หรือไฟล์ text อะไรยังไงให้ User Experience ดีที่สุด เพราะการ Push ส่งข้อมูลซี้ซั้วอาจจะทำให้เวปแสดงผลได้ช้าลงไปอีก

 

เอาล่ะ พร้อมมาเริ่มรีดประสิทธิภาพให้เวปกัน!

อ้างอิง

http://calendar.perfplanet.com/2016/http2-push-the-details/

npm แล้วช้ามาลองใช้ yarn จาก facebook กัน

yarn-kitten-full

ทุกๆท่านที่เขียน Node.js ก็ต้องคุ้นเคยกับ npm กันอยู่แล้วนะครับ ซึ่งบางทีเรามักจะเจอว่า มัน install นาน รวมถึงเวลาเน็ตมีปัญหาแล้วมัน install ไม่ได้ มาวันนี้ Facebook ได้ประกาศ Open Source ตัว package manager ตัวใหม่ที่ทำงานบนพื้นฐานของ npm ซึ่งชื่อของมันก็คือ Yarn

ทาง Facebook ได้พูดถึงจุดเด่นหลักๆได้ประมาณนี้ครับ

  1. เร็ว – เพราะมีระบบการ Cache ถ้า pkg ไหนโหลดมาแล้วก็ไม่ต้องโหลด
  2. เชื่อถือได้ – ใช้ในการติดตั้ง package ได้เหมือนเจ้าอื่น
  3. ปลอดภัย – ทำการ check sum ซึ่งเป็นการตรวจเช็คว่าการ install นั้นถูกต้อง

ความสามารถหลักๆของมันคือเช่น

  • Offline Mode ถ้าเคย insatll package มาแล้วครั้งนึง ก็ไม่ต้องใช้ internet ในการ install แล้ว
  • ใช้ประโยชน์จาก Network อย่างเต็มที่ทำให้การ install นั้นเร็วขึ้น
  • ใช้ได้ทั้งกับ npm และ Bower
  • ทำการ retry ถ้าหากว่ามีปัญหาตอน install

อ่านรายละเอียดได้ที่ https://github.com/yarnpkg/yarn และ https://code.facebook.com/posts/1840075619545360 สำหรับ Architure และที่มาที่ไปของ Project นี้ครับ

เกริ่นมาพอแล้ว เรามาลองเล่นกันดีกว่าครับ

ก่อนอื่นก็

npm install -g yarnpkg

แล้วก็ลองเช็คดูครับว่าลงได้

yarnv.png

ที่นี้เดี๋ยวผมลอง install module เล่นๆ เอาเป็น socket.io ละกันครับ ดังนั้นผมสร้าง package.json ง่ายๆมาก่อน

{
“dependencies”: {
“socket.io”: “^1.5.0”
}
}

package.json

ที่นี้ลองรัน “yarn” ซึ่งเทียบเท่ากับ “npm install”

จะเห็นว่าเราจะได้ node_modules มารวมถึงเวลาที่ใช้ไป 3.61s

yarn_install.png

ทีนี้ผมลองลบ folder ‘node_modules’ ทิ้งเพื่อจะดูว่ามัน Offline install ได้จริงเปล่าแล้วก็ทำการ yarn อีกที ผลที่ได้คือ !!! 0.77s

yarn_reinstall

จะเห็นได้ว่า yarn นั้นทำการ cached ตัว package ที่เคยโหลดมาแล้วไว้ที่ Local Machine ซึ่งผมลองไปคุ้ยๆ Folder ดูก็เจอว่ามันไปเก็บไว้ที่  %localappdata%/yarn นี่เองสำหรับบน Windows

local_yarn.png

สรุป ผมว่า Tool ตัวนี้น่าสนใจครับ เดี๋ยวว่าจะเอาไปลองใช้ใน Production บ้าง โดยเฉพาะช่วงเน็ตช้าและต้องงานหลายๆ repo ที่อาจจะมีการใช้ npm package ซ้ำๆกันบ่อยๆ…

Published Android เกมแรกกับ Cactus Hip Hip

เนื่องจากส่วนตัวเคยเขียน Android มาสมัยแรกๆ แต่ก็ลองแต่เป็น apk แล้วเอามาลงในเครื่อง แต่แล้วผมเลยได้มีโอกาสทำเกมเล็กๆขึ้นมาแล้วลอง publish ขึ้น Google Play Store ครับ

เกมนี้ก็คือ Cactus Hip Hip เป็นเกมแนว Arcade เล่นง่ายๆแค่จิ้มๆให้ตัว Qewy โดดไปมาเก็บลูกกระบองเพชรสีเขียวให้จบและจะมีการ Upload คะแนนตอนท้าย

Screen Shot 2559-09-28 at 5.05.07 PM.png

มาพูดถึง Technologies ที่ผมใช้ดีกว่าซึ่งเกมนี้ใช้เวลาพัฒนาประมาณ 5 วันได้มั้ง (พอดีผมทำแค่วันเสาร์หรืออาทิตย์)

  • TypeScript เนื่องจากว่าได้ใช้ในงานประจำ :p
  • Phaser.IO ซึ่งเป็น Game Engine เอาไว้เขียนเกม 2D ด้วย JavaScript ที่ทำให้ชีวิตเราง่ายขึ้น เพราะช่วยจัดการระบบฟิสิกส์ การชนกันของภาพ การทำ animation รวมถึงเสียง
  • Apache Cordova ซึ่งเอาไว้ Build โปรเจคจาก HTML5/JavaScript ไปเป็น apps
  • CrossWalk ซึ่งเป็น WebEngine เนื่องจากผมเจอว่า เวลา App ที่เขียนด้วย Phaser นั้นรันบน Android ด้วย Webview ที่ติดมากับ OS นั้นมันช้ามาก ซึ่ง CrossWalk นั้นจะเป็นโปรเจคที่ทำให้เรา ship ตัว Webview ตัวล่าสุดไปกับ App (และทำให้ App ใหญ่ขึ้น 20MB  😦 )
  • LoopBack เอาไว้เขียน REST เพื่อเก็บ Score
  • Azure DocumentDB ซึ่งเป็น Service ของ Microsoft Azure ในการใช้ NoSQL  ซึ่งจริงๆแล้วก็คือ MongoDB
  • และอื่นๆ เช่น
    • ใช้ Cordova  กับ iOS
    • Bitbugget ใช้เก็บ private git repository

จะเห็นว่าแค่เกมเล็กๆ Developer อย่างเราก็ต้องรู้จัก Tech หลายหลายมาก..

และที่สำคัญได้ลอง publish App ขึ้น Store  ซึ่งทำให้รู้ว่าหลังจากจ่ายตังค์ขอ Dev License แล้วใช้เวลา 1-2 ชม ก็สามารถเอา App ขึ้นได้ละ  (และจะเห็นว่า URL ของ app ผมยังเป็น codova อยู่เลยและมันก็แก้ไม่ได้ ฮาาา…)

Linkhttps://play.google.com/store/apps/details?id=io.cordova.myappee96f2

Node.js – LoopBack มาต่อกันที่การเพิ่ม REST API กับ Query กัน

หลังจากที่ผมพูดถึงความสามารถเบื้องต้นของ LoopBack ไปแล้วนั้นใน Node.js เขียน REST API ด้วย LoopBack ซึ่งจะเห็นได้ว่าเราสามารถสร้าง REST API ได้ง่ายมาก แต่ทีนี้ถ้าเราต้องการที่เพิ่ม API ล่ะจะทำได้ยังไง

เรากลับมาดูที่ไฟล์ user.js กันก่อนครับ ซึ่งเป็นไฟล์ว่างๆ

'use strict';

module.exports = function(User) {

};

สิ่งที่ผมอยากจะได้ก็คือถ้าเราต้องการ API เพื่อที่จะเอาค่าของ User 4 คนที่ได้คะแนนสูงสุดจะต้องทำยังไงบ้าง
สิ่งที่เราต้องทำคือการเพิ่ม remoteMethod (ซึ่งทาง LoopBack Framework จะทำการ Route มาเข้า Method ของเราครับ

'use strict';

module.exports = function(User) {
User.getTopUsers = function(cb){
cb(null, "getTopUsers Response");
};

User.remoteMethod (
'getTopUsers',
{
http: {path: '/gettopusers', verb: 'get'},
returns: {arg: 'users', type: 'string'}
}
);
};

จะเห็นว่า Code User.remoteMethod นั้นทำการ define ว่าถ้ามี HTTP Request ที่เป็น GET เข้ามาที่ Path /gettopusers นั้นจะทำการเรียก Method User.getTopUsers นั่นเอง

และใน Method ที่ชื่อ User.getTopUsers นั้นตอนนี้ผมลองให้ส่งค่ากลับไปว่า getTopUsers Response ที่นี้ลองรันดู LoopBack เพื่อเป็น Server ดูครับ

ลองเช็คกับ API Explorer ก็จะเห็นว่า API ที่เราเพิ่งเพิ่มเข้าไปมาแล้ว

new-api.png

เนื่องจากเป็น GET ผมลองเรียกผ่าน Browser ครับก็ได้ Response มาแบบนี้ ตามที่เขียนไว้

new-api-response.png

ที่นี้จาก API ที่ผมต้องการนั้น ผมอยากได้ User ที่คะแนนสูงสุด ซึ่งทาง LoopBack นั้นก็มี Build-in API ให้เราใช้ในการ Query ข้อมูลจาก Model ได้ครับ (Querying data) เช่น

'use strict';

module.exports = function(User) {
User.getTopUsers = function(cb){
User.find({
order: 'score DESC',
limit : 4
}, (err, instances)=>{
cb(null, instances);
});
};

User.remoteMethod (
'getTopUsers',
{
http: {path: '/gettopusers', verb: 'get'},
returns: {arg: 'users', type: 'string'}
}
);
};

ซึ่งจาก Code ข้างบนนี้จะเป็นการใช้ User.find ซึ่งเป็นการ Query หา Model โดยมี Filter ว่า หา ‘score’ ที่มีค่าสูงสุด 4 entries แรก

ที่นี้ลองทดสอบกันอีกทีครับ

ผมลองใส่ ข้อมูลไปแบบนี้ตาม Order

[
{
“name”: “alpha”,
“score”: 70,
“id”: 1
},
{
“name”: “beta”,
“score”: 45,
“id”: 2
},
{
“name”: “catto”,
“score”: 39,
“id”: 3
},
{
“name”: “delta”,
“score”: 86,
“id”: 4
},
{
“name”: “sigma”,
“score”: 34,
“id”: 5
},
{
“name”: “fanta”,
“score”: 12,
“id”: 6
}
]

ทีนี้ลองเรียกผ่าน API /gettopusers ดูครับ

result.png

เราก็จะได้ Response ที่ทำการ Order มาแล้วตาม score โดยที่ delta(80), alpha(70), beta(45), catto(39) ตามลำดับที่เราได้ทำ Query ไว้อย่างง่ายดาย

มาถึงตรงนี้เราก็จะได้เห็นความ Powerful ของ LoopBack ไปอีกหนึ่งเรื่องนะครับ 🙂

powered-by-lb-med

Fear Driven Development

จะเกิดอะไรขึ้นถ้า Developer ต้องทำงานอยู่ภายใต้สิ่งแวดล้อมที่มีความกลัวครอบงำ…

ทีมที่ทำงานด้วย Fear Driven Development (FDD) นั้นจะทำให้ Developer นั้นรู้สึกว่า

  • กลัวที่จะทำผิด
  • ไม่กล้าแก้ Code
  • ไม่กล้า Refactor
  • ไม่กล้า Commit หรือ Push Code
  • ไม่กล้าเปลี่ยน Design
  • ไม่กล้าท้าทาย UI/UX หรือ Product เพราะกลัวได้งานเพิ่ม
  • ไม่กล้ารับปาก เพราะกลัวทำไม่ได้
  • ไม่กล้าออกความเห็น เพราะกลัวต้องรับผิดชอบกับ Idea ตัวเอง
  • ไม่กล้าเปลี่ยน Tools หรือ Framework
  • กลัวว่า Software นั้นจะมี BUG ซึ่งเห็นเหตุผลให้เกิด Process ต่างๆมากมาย
  • และสุดท้ายทำให้ Developer ใช้เวลาไปกับงาน Admin/Process มากกว่าการเขียน Code….

ความกลัวและไม่กล้าต่างๆเหล่านี้ทำให้ Project ไปได้ช้าลงแน่นอน รวมถึงทำให้เกิด Over-Engineer (การ Design Software เกิด Use case ที่จะเกิดขึ้นจริง) และกลัวการ Estimate ซึ่งเป็นการบอกเวลาว่า Project นี้จะเสร็จตอนไหนกับเหล่าท่านๆผู้บริหารระดับสูงทั้งหลาย จึงทำให้การ Estimate (ประเมิณ) กลายมาเป็นการลงรายละเอียดซึ่งใช้เวลาเยอะมากจนกว่าจะได้ตัวเลขออกมาก

วัฒนธรรมกลัวตกงาน

เป็นลักษณะหนึ่งของ FDD ซึ่งเกิดจากทีมใช้งาน Developer อย่างหนักและมีการกดดันกันว่าถ้ามีปัญหากับโปรเจคอาจจะโดนไล่ออกได้ ซึ่งการทำแบบนี้ไม่อาจจะทำให้ทีมนั้นมี Productivity ที่ดีได้ รวมทั้งยังขาด Innovation ด้วยรวมถึงทำให้เกิดความกดดันต่างๆและทำให้อัตรา Turn-Over สูงขึ้น ซึ่งในทีมที่มีวัฒนธรรมแบบนี้ส่วนใหญ่ก็จะมีการยกย่องคนที่เรียกว่า Hero(Hero Driven Development) ซึ่งเป็นคนที่ทำให้แต่ละ Release นั้นผ่านไปได้จะได้รับการยกย่องและสุดท้ายก็จะกลายเป็นว่าทีมนั้นต้องการ Hero ตลอดเวลานี่แหละคือปัญหา!

รวมถึงวัฒนธรรมการ Blame เช่นเมื่อเวลามีปัญหาเกิดขึ้นก็หาคนทำผิดแทนที่จะช่วยกันแก้ปัญหาให้ User…

วัฒนธรรมกลัวการแก้ Code

อีกสิ่งที่น่ากลัวของการพัฒนา Software ซึ่งก็คือ Developer ไม่กล้าแก้ไข Code ซึ่งอาจจะเป็นเพราะว่า Code นั้นเก่ามากๆซึ่งปกติน่าจะเกิดจากการที่ไม่เข้าใจ Code ชุดนั้นมากกว่า ลักษณะของ Code ประเภทนี้คือมันก็ work ดีเกือบทุก case แต่ถ้าจะต้องแก้ Developer ก็จะกลัวจะเกิดผลที่คาดไม่ถึง รวมทั้งเกิด Bug ต่างๆ และที่เลวร้ายไปกว่านั้นคือไม่กล้าแก้ Code ของตัวเอง!

สุดท้าย

ส่วนตัวผม คิดว่าสิ่งที่อาจจะน่ากลัวกว่าก็คือการกลัวการเปลี่ยนแปลงโดยเฉพาะ Developer เพราะอย่างที่รู้กันอยู่แล้วว่า Software Development นั้นเทคโนโลยีหรือ Tools ต่างๆมาเร็วไปไว ซึ่งการที่เราไม่ยอมรับการเปลี่ยนแปลงตรงนี้ก็จะคงอยู่แต่โลกเดิมๆ โดยไม่ได้มองหาสิ่งที่จะมาเพิ่ม Productivity ความรู้ใหม่ๆ เพื่อช่วยให้เราเก่งขึ้นและทำงานได้ดีขึ้น 🙂

ถ้า Developer ไม่กล้าแก้ Code แล้วใครจะกล้าแก้ล่ะ???

เรียบเรียงจาก:

http://www.hanselman.com/blog/FearDrivenDevelopmentFDD.aspx

 

Node.js Tools for Visual Studio มีดีอะไร

logo.png
ชีวิตนี้ยังหนีไม่พ้น Microsoft จริงๆ เพราะตอนนี้ Microsoft ได้ออก Node.js Tools for Visual Studio (ณ วันนี้ก็ version 1.2 แล้ว) ซึ่งเป็น Extension เสริมที่ทำให้ Visual Studio(ตัวเต็ม) นั้นทำงานกับ Node ได้อย่างมีประสิทธิภาพมากขึ้นซึ่งสามารถใช้ได้กับ VS2015 – Official Link

พอลงไปแล้วก็จะมี Node.js Tools โผล่มาตรงนี้

node_tool

จากที่ Microsoft โปรโมทก็มีคร่าวๆ ดังนี้

Project Templates

ซึ่งทำให้เราสร้าง Project โดยเลือกได้เลยว่าจะเอา โปรเจคเปล่าๆ หรือมาพร้อมกับ Code ตัวอย่างที่เขียน http server ง่ายๆ ถ้ากลัวเริ่มไม่ถูก

templates
เห็นว่ามี templates ให้เลือกเต็มเลย

IntelliSense

ซึ่งผมลองแล้วก็บอกได้ว่า สมตามที่โฆษณาไว้ เพราะมันมี icon แสดงให้ดูง่ายและเร็วด้วย (สำหรับ Build-in Function นะครับ ถ้าเป็น module ที่เราใช้อาจจะต้องไปใช้ TypeScript เหมือนให้มี IntelliSense)
intellisense.png

Npm Integration

มีหน้าจอที่เป็น UI ให้ใช้ในการหา module ต่างๆ ได้ง่ายขึ้นสำหรับคนที่ไม่สันทัด command line

npm_1.png
เวลา Right Click ที่ npm folder ใน Project
npm_2
พิมพ์ “mocha” ไปก็มี version ต่างๆให้เลือก (แต่ผมว่าใช้ commandline เร็วกว่านะ :p )

Interactive Window

เป็นหน้าต่างที่เอาไว้ลอง Code JavaScript แบบทันทีทันใจแถมยังมี syntax Hilight กับ IntelliSense ให้ด้วย

interact_win
เปิดจากตรงนี้
interact_win2
หน้าต่างเปิดมาเป็นแบบนี้
interact_win3
ลองพิมพ์ function บวกเลขไปดูครับ ขึ้น Undefined…
interact_win4
ลองใส่ add(1,2) ดู ก็จะได้คำตอบออกมาเป็น “3”

Advanced debugging

ใช้ในการ Debug เช่น การตั้ง break points หรือการใช้งานพวก Watch ในการดูค่าตัวแปรต่างๆ ซึ่งทำได้ดีมากเหมือน C# ตรงนี้ผมว่า Powerful จริง

debug
ยกตัวอย่างมี express app ตัวนึงรับ ‘GET’ request มาครับ

จะเห็นว่าเราเห็นค่าของตัวแปร req ทั้งหมดเลย

debug_2
req.headers เราเห็นหมด ง่ายๆแบบนี้ (y)

 

และอื่นๆอีกมากมาย เช่น Profiling (ตัวนี้เด็ดมากกกก), Unit Testing, TypeScript Integration

ปล. ตอนแรกว่าจะเขียนเรื่อง Profiling แต่เห็น Features อื่นก็น่าสนใจไม่น้อยเลยเอามาเขียนก่อนครับ 😉