การติดตั้ง Postman

โปรแกรม Postman เป็นโปรแกรมสำหรับทดสอบเรียกใช้ Rest Web Service และทดสอบ OAuth              โปรแกรมที่ได้รับความนิยมเป็นอย่างสูงในการทดสอบใช้งาน Rest และ OAuth  ตัวหนึ่งมีชื่อว่า Postman ซึ่งสามารถเรียกใช้ได้ทั้ง Windows, Linux และ Mac ซึ่งเมื่อก่อนจะเป็น Extension ของ Google Chrome แต่หลังจาก Chrome Update ครั้งใหญ่ได้มีเปลี่ยนเป็นโปรแกรมติดตั้งแยกเฉพาะ โดยมีวิธีติดตั้งดังนี้ 1) ทำการ Download โปรแกรม ที่นี่ https://www.getpostman.com/downloads/ 2) ทำการติดตั้ง Postman 3) จากนั้นจะปรากฏหน้า Login ถ้า Login ก็จะมีระบบช่วยจำค่าต่าง ๆ ที่เคยตั้งไว้ แต่ถ้าไม่ต้องการ Login ก็กดตามรูปเลยครับ 4) จะได้หน้าตาโปรแกรมดังรูป 5) ตัวอย่างการเรียกใช้งานเราสามารถใช้ URL ที่ต้องการเพื่อเรียกใช้ โดยสามารถใส่ Header,GET,POST และ Reset Web Service ดังรูป 6) ตัวอย่าง Option ในส่วนของ Authorization จะมีให้เลือกมากมายกว่า Version ก่อน ๆ ในตอนต่อไปก็จะมาทดสอบใช้ Postman ในการทดสอบการใช้งาน OAuth2 กันครับ

Read More »

python #03 – Train/Validation/Test and Accuracy Assessment with Confusion Matrix

ต่อจาก python #02 – ติดตั้ง Tensorflow และ Keras ซึ่งกล่าวถึง ขั้นตอนการสร้าง Model และ วาง Layers ต่าง ๆ ของ Keras รวมไปถึง การใช้ model.summary() เพื่อแสดงโครงสร้าง Neural Network ที่สร้างขึ้นมาแล้ว ต่อไป เป็นการ นำข้อมูลมาแบ่งเป็นชุด สำหรับ Train/Validate/Evaluate การแบ่งข้อมูล สมมุติมีข้อมูล ที่อาจจะมาจาก CSV File ซึ่งมี field 0 – 9 คือ ตัวแปรต้น หรือ ที่มักเรียกว่า Features และ มี field 10 เป็น ตัวแปรตาม หรือ ที่เรียกว่า Label ทำการแบ่งข้อมูล เป็น X และ y(วิธีการ Slice ข้อมูล จะเป็นรูปแบบ data[ row, column]) ก่อนนำไปใช้ ต้องแปลง y ให้เป็น One-Hot Encode ซึ่ง Keras เองมีเครื่องมือให้อยู่แล้ว การแบ่งข้อมูลเป็น Train/Test สามารถทำได้หลายวิธี แต่วิธีหนึ่งที่ง่ายและสะดวก คือ ใช้ train_test_split จาก Scikit Learn ในตัวอย่างนี้ มีข้อมูลตัวอย่างน้อย คือ เพียง 5 samples จึงแบ่งสัดส่วน Test Size = 0.3 หรือ 30% การสร้าง Model สมมุติ เราออกแบบ Neural Network ตามภาพ กล่าวคือ มี Input Layer จำนวน 10 Nodes และ มี Hidden Layers เป็น Dense 2 ชั้น จำนวน 8 และ 5 Nodes ตามลำดับ โดยมี Activation Function เป็น Relu จากนั้น ส่งไปยัง Output Layer ที่มี 3 Nodes ใช้ Activation Function เป็น Softmax เพราะจะเป็น Categorial Classification และ ใช้ Code ตามนี้ แล้ว Compile โดยใช้ Loss Function เป็น Categorical Crossentropy, Optimizer เป็น Adam ที่ Learning Rate 0.001 (เลือกจะตั้งค่าหรือไม่ก็แล้วแต่กรณี) และกำหนด Metrics เป้น Accuracy การ Training ใช้คำสั่ง fit ในการ train โดยกำหนด X_train คือข้อมูลสำหรับการสอนโมเดล และ y_train เพื่อให้โมเดลเปรียบเทียบว่าต่างจากผลที่คำนวณแค่ไหน (ผ่าน Loss Function) จากนั้นจึงทำการ Adjust Weights กลับมา (ผ่าน Optimizer) ในกระบวนการ Backpropagationในตัวอย่างนี้ ตั้งค่า epochs หรือ จำนวนรอบที่จะ Train และ batch_size เพื่อกำหนดว่า

Read More »

การสร้าง RESTful API สำหรับใช้งานจริง ง่าย ๆ ด้วย Flask และ Waitress

จาก From LAB to Production – จาก Machine Learning Model สู่ Flask RESTful ซึ่งได้นำ Machine Learning แบบ Statistical Approach อย่าง Logistic Regression ที่สร้างโมเดล และ Train กับข้อมูลเรียบร้อยแล้ว (บนเครื่อง Development) จากนั้น ได้นำโมเดลออกมาใช้งาน โดยใช้ วิธีการ Serialization ด้วย joblib ในภาษา Python ได้เป็นไฟล์ออกมา แล้วจึงนำไปใช้เพื่อใช้ในการทำนาย (predict) ชนิดของดอก Iris บนเครื่อง Production โดยรับ Input จากผู้ใช้ผ่าน HTTP Protocol ทั้ง GET/POST ที่ TCP/5000 ตัวอย่างดังกล่าว ยังเป็นเพียงการ “ทดสอบ” แต่ในบทความนี้ จะเป็นวิธีการ ซึ่งนำไปสู่การใช้งานจริง ๆ ซึ่ง Flask แนะนำให้ใช้งานกับ “waitress” (น่าจะเลียนแบบจาก Server) ซึ่งเป็น WSGI (Web Server Gateway Interface) อีกตัวหนึ่ง ใช้งานง่าย เพราะไม่ต้องติดตั้ง Apache/Nginx เลย ติดตั้ง waitress predict.py from flask import Flask, request, jsonify from flask_restful import Resource, Api, reqparse from flask_cors import CORS app = Flask(__name__) # Enable CORS CORS(app) @app.route(“/predict”, methods=[“POST”]) def predict(): result = 0 if request.method == “POST”: input_value = request.form[“input_value”] # ประมวลผล # … # ตัวอย่างเช่น รับค่ามา แล้ว คูณ 2 result=input_value * 2 # ### return jsonify( prediction=result ),201 ไฟล์ predict.py เป็นตัวอย่าง python ซึ่งรับค่า input_value จาก HTML form ผ่าน POST method เข้ามา ที่ /predict ซึ่งเขียนด้วย Flask ที่จะไปเรียกใช้ฟังก์ชั่น prediction() แล้วก็ทำการคำนวณที่ต้องการ จากนั้น ตอบค่ากลับไปเป็น JSON ด้วยฟังก์ชั่น jsonify โดยสามารถกำหนด key ชื่อ prediction และ value เป็น result ที่คำนวณได้ และแจ้ง Response Code เป็น 201 waitress_server.py from waitress import serve import predict serve(predict.app, host=’0.0.0.0′, port=8080) ไฟล์ waitress_server.py ก็เพียงแค่ import serve จาก waitress ที่ติดตั้งไป และ import predict ซึ่งก็คือไฟล์ predict.py ข้างต้น (อยู่ในไดเรคทอรีเดียวกัน)

Read More »

Virtual data center with OpenNebula

OpenNebula เป็นชื่อของ open source software สำหรับทำ virtual data center เวอร์ชั่นล่าสุดคือ 5.6.1 (https://opennebula.org) ผมได้ทดลองในห้องปฏิบัติการ และเขียนเป็นขั้นตอนการติดตั้งจนกระทั่งได้ VM ขึ้นมา แต่ยังไม่ลงรายละเอียดถึงขั้นใช้งาน storage network ได้ ซึ่งจะได้ทดลองกันต่อไป ในตอนนี้ จะเรียกว่า basic set up ก็ได้นะ ในการ set up ระบบจริงตามคำแนะนำ แต่ละเครื่องควรมี network card 2 cards เพื่อแยกระหว่าง network ที่ให้บริการ กับ Management network การ set up จะต้องมีเครื่องที่เป็น Front-end เพื่อทำหน้าที่เป็น database และเว็บเพจสำหรับทำ configuration และสั่งการ และจะต้องมีเครื่องที่เป็น Hypervisor อย่างน้อย 1 เครื่อง โดยเลือกได้ว่าจะใช้ KVM หรือ vcenter สเปคเครื่อง hypervisor นี้ต้องรองรับ Virtualization extensions (Intel VT-x or AMD-V) เตรียมการทดลองโดยใช้ เครื่องคอมพิวเตอร์ที่ผมนำมาใช้มี 3 เครื่อง อายุเครื่องก็พอสมควร (ตามกำลังทรัพย์ที่มีในห้องปฏิบัติการ) แต่ทั้ง 3 เครื่องนี้ มีเพียง 1 network card ครับ เครื่อง Front-end 1 เครื่อง สเปค Pentium(R) Dual-Core CPU E5200 @ 2.50GHz มี RAM 4 GB อันนี้เป็นเครื่องทั่วไปที่รัน apache2 web server และ mariadb database ได้ ใช้เครื่อง KVM จำนวน 2 เครื่อง เพื่อจะให้เห็นว่าสามารถสร้าง VM ไปที่ KVM node ที่ต้องการได้ เครื่อง KVM node01 เป็น AMD Phenom(tm) II X4 945 Processor มี RAM 8 GB และ KVM node02 เป็น Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz มี RAM 4 GB นอกจากเครื่องคอมฯ แล้ว ผมก็มี network switch (L2-managed) เพื่อกำหนด port ให้รองรับ 802.1Q VLAN ผมออกแบบให้มี 2 VLAN คือ VLAN ID 6 (untagged) และ VLAN ID 7 (tagged) ซึ่ง VLAN 6 ก็คือ ครึ่งแรกของ network class C 192.168.6.0 เขียนแบบ CIDR 192.168.6.0/25 มี gateway คือ 192.168.6.1 และ VLAN 7 ก็คือ ครึ่งหลังของ network 192.168.6.128/25 มี gateway คือ 192.168.6.129 ผมเขียนขั้นตอนไว้ในเว็บไซต์

Read More »

django – as a Dialogflow Webhook #03

บทความนี้ จะกล่าวถึง การใช้ django ทำหน้าที่เป็น Webhook จาก Dialogflow ผ่าน Fulfillment ทาง HTTP Post Request ด้วย JSON object และ ทำการประมวลผล แล้วตอบกลับไปเป็น JSON Object เช่นกัน เพื่อให้ Dialogflow ตอบสนองต่อผู้ใช้ได้ตามต้องการ เช่น อาจจะให้ไปค้นข้อมูลจากฐานข้อมูลในองค์กรมาตอบ เป็นต้น ในมุมของ django django (ดี)จังโก้ ดีอย่างไร #01 ได้กล่าวถึงการสร้าง Web Application จาก Model โดยกำหนด Fields ต่าง ๆ จากนั้น django ก็จะสร้าง Web Form ต่าง ๆ ให้อัตโนมัติ และยังสามารถสร้าง Users ของระบบ พร้อมทั้ง กำหนดสิทธิ์การเข้าถึงของแต่ละคนได้อีกด้วย แล้วนำไปผูกกับส่วน Admin เพื่อให้ผู้ใช้ทำการ Authentication ก่อนเข้าจัดการกับข้อมูลต่างได้ และในบทความ django – Deploy to Production #02 ได้แนะนำวิธีการ Deploy ระบบที่สร้างขึ้นสู่ Production ตามลำดับ ในบทความนี้ จะใช้ “view” ซึ่งเป็นอีกส่วนของ django ตามขั้นตอนต่อไปนี้ ใน myproject สร้าง App ใหม่ ชื่อ fulfillment เพิ่ม ‘fulfillment’ app ลงใน myproject/settings.py ที่ INSTALLED_APPS( ในตัวอย่างก่อนหน้า เราเพิ่ม worklog app ไว้แล้ว)  INSTALLED_APPS = [ ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django.contrib.messages’, ‘django.contrib.staticfiles’, ‘worklog’, ‘fulfillment’ ] จากนั้น แก้ไขไฟล์ myproject/fulfillment/views.py ตามนี้ from django.http import HttpRequest, HttpResponse from django.views.decorators.csrf import csrf_exempt import json # Create your views here. @csrf_exempt def sayHi(request): j = json.loads(request.body) x = { “fulfillmentText”: “This is a text response” } return HttpResponse(json.dumps(x)) ในส่วนนี้ จะ import packages ต่อไปนี้ HttpRequest เพื่อรับ Input ผ่าน HTTP HttpResponse เพื่อตอบ Output ผ่าน HTTP csrf_exempt เพื่อบอกว่า ยอมให้ทำงานผ่าน HTTP POST โดยไม่ต้องมี CSRF Token (ถ้าไม่ใส่ อยู่ ๆ จะส่ง POST เข้ามาไม่ได้ ) json เพื่อจัดการ JSON object จากนั้น สร้าง Function ชื่อ “sayHi” มี function ที่เรียกใช้งานดังนี้ json.loads(request.body) ทำหน้าที่แปลง JSON Object จาก HTTP Request เข้ามาอยู่ในรูป Python Object ในที่นี้ จะนำข้อมูลจาก Dialogflow

Read More »