python #02 – ติดตั้ง Tensorflow และ Keras

ต่อจาก python #01 – ติดตั้ง jupyter notebook บน Windows ต่อไปเราจะใช้ Machine Learning Library “Tensorflow” และใช้ “Keras” ซึ่งเป็น High-level Neuron Network API ซึ่งจะไปเรียกใช้ Backend คือ Tensorflow อีกชั้นหนึ่ง จาก jupyter notebook ทำตามขั้นตอนต่อไปนี 1.  คำสั่งต่อไปนี้ เพื่อติดตั้ง Tensorflow 2.  คำสั่งต่อไปนี้ เพื่อติดตั้ง Keras จะได้ผลประมาณนี้ สร้าง Neural Network ด้วย Keras เริ่มจาก import ส่วนต่าง ๆ ได้แก่ Models และ Layers สมมุติเราจะสร้าง Model แบบนี้ เสร็จแล้วก็ต้อง compile ตั้งค่า Hyperparameters ต่าง ๆ ดู Summary ได้ผลประมาณนี้

Read More »

python #01 – ติดตั้ง jupyter notebook บน Windows

jupyter Notebook เป็น Open Source Web Application ให้เราสามารถเขียนภาษา python ได้ง่ายขึ้น สามารถ Share ได้ด้วย และยังสามารถใส่คำอธิบาย (Markdown) ได้ด้วย ติดตั้งลงในเครื่องส่วนตัวได้ ในบทความนี้ แสดงวิธีติดตั้งและใช้งานบน Microsoft Windows ดังนี้ 1. ขั้นแรก ต้องมี Python ก่อน (หมายเหตุ: ณ เวลานี้ 27/11/61 รุ่นล่าสุดคือ 3.7.1 แต่เนื่องจากจะแนะนำการใช้งาน Tensorflow, Keras จึงยังต้องเลือกใช้ Python 3.6.7) https://www.python.org/ftp/python/3.6.7/python-3.6.7.exe เมื่อติดตั้งแล้ว ควร Restart เครื่องสักหนึ่งครั้ง 2. ติดตั้ง pip ซึ่งใช้ในการติดตั้งเครื่องมือต่าง ๆเปิด Windows Console (กดปุ่ม Win + R) แล้วพิมพ์คำสั่ง cmdจากนั้น ใช้คำสั่งต่อไปนี้ 3. (Optional) ติดตั้ง virtualenv เพื่อให้สามารถจัดการ Virtual Environment ได้ง่ายขึ้น เพราะอาจจะต้องทำหลาย Project ซึ่งใช้รุ่นของ Package/Module ที่แตกต่างกันบนเครื่องเดียวกัน 4. ติดตั้ง jupyter notebook 5. เมื่อติดตั้งเสร็จแล้ว ก็ใช้คำสั่งต่อไปนี้ ระบบจะเปิด Web Browser มายัง http://localhost:8888 จากนั้น คลิกที่ปุ่ม New > Python3 จากนั้น เราก็จะสามารถใช้คำสั่ง Python ทั่ว ๆ ไปได้ นอกจากนี้ ยัง Save ได้ และสามารถส่งต่อให้ผู้อื่นใช้ได้ด้วย

Read More »

Ubuntu server 18.04 config static IP with netplan

เดิมก่อนหน้า Ubuntu server 18.04 LTS จะออกมาให้ใช้งานกันนั้น จะเป็น Ubuntu server 16.04 LTS เราตั้งค่า (config) static IP ให้กับ server ด้วยไฟล์นี้ /etc/network/interfaces ซึ่งก็คือ software package ชื่อ ifupdown และ DNS resolver ที่ใช้ก็คือ resolvconf แต่ใน Ubuntu server 18.04 นี้ เปลี่ยนไปใช้ package ชื่อ netplan แก้ไขที่ไฟล์ /etc/netplan/01-netcfg.yaml และใช้ DNS resolver คือ systemd-resolve ซึ่งจะ connect สอบถามชื่อ DNS จาก internal DNS ที่ IP 127.0.0.53 (ตรวจดูด้วยคำสั่ง cat /etc/resolv.conf) โดย default จะเป็นค่า network interface แบบ รับค่า IP มาจาก DHCP server ไฟล์ /etc/netplan/01-netcfg.yaml network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: yes dhcp6: yes หากต้องการใช้เลข IP แบบ Static IP ก็ต้องตั้งค่าเองในแฟ้ม /etc/netplan/01-netcfg.yaml เป็นตัวอย่างประมาณว่า IP คือ 10.0.100.251 ใน class C (/24) มี gateway คือ 10.0.100.1 ทำหน้าที่ nameserver ด้วย และมี nameserver ที่สองคือ 192.100.77.10 network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no addresses: [ 10.0.100.251/24 ] gateway4: 10.0.100.1 nameservers: addresses: – 10.0.100.1 – 192.100.77.10 หลังจากแก้ไขค่าเสร็จแล้ว สั่งให้ network ทำงานใหม่ ใช้คำสั่ง sudo netplan apply ถ้าตอนนี้ใช้ netplan version 0.36.3 เราสามารถตั้งชื่อ network interface เป็นชื่อ vif1 แทน physical network interface เดิม ก่อนอื่น ให้ใช้คำสั่ง ifconfig เพื่อดูค่า MAC address ของ enp0s3 สมมติคือ 44:bb:33:85:91:08 ตัวอย่างการแก้ไขข้อมูล network: version: 2 renderer: networkd ethernets: vif1: match: macaddress: “44:bb:33:85:91:08” set-name: vif1 dhcp4: no addresses: [ 10.0.100.251/24 ] gateway4: 10.0.100.1 nameservers: addresses: – 10.0.100.1 – 192.100.77.10 หลังจากแก้ไขค่าเสร็จแล้ว ใช้คำสั่ง sudo reboot หลาย ๆ คน อาจจะอยากตั้งชื่อ network interface เป็นชื่อ eth0

Read More »

Stencil : JSX

Stencil component ใช้ JSX template syntax ในการกำหนดรูปแบบการแสดงผลที่จะถูก render ของ component  ซึ่งแต่ละ component จะมี render function ที่จะทำหน้าที่ return โครงสร้างของ component ที่จะเปลี่ยนเป็น DOM ตอน runtime เพื่อแสดงผลบนหน้าจอ class MyComponent { render() { return ( <div> <h1>Hello World</h1> <p>This is JSX!</p> </div> ); } } จาก class Mycomponent ด้านบน render function จะ return div element ที่ภายในประกอบไปด้วย h1 และ p Data Binding เมื่อ component ต้องการที่จะ render ข้อมูลที่มีการเปลี่ยนแปลง dynamic data ทำได้โดยการ bindind ข้อมูลนั้นๆ โดยใช้ {variable}  (ซึ่งจะใกล้เคียงกับ ES6 template ที่ใช้ ${variable}) render() { return ( <div>Hello {this.name}</div> ) } Conditionals เมื่อ component มีการแสดงผลที่ขึ้นอยู่กับเงื่อนไข สามารถใช้ JavaScript if/else statements ใน render function ดังเช่นตัวอย่างด้านล่างนี้ ถ้า this.name ไม่มีการกำหนดค่า จะแสดงผล “Hello, World” render() { if (this.name) { return ( <div>Hello {this.name}</div> ) } else { return ( <div>Hello, World</div> ) } } หรือ จะเขียนในรูปแบบ inline conditionals ก็ได้เช่นกัน render() { return ( <div> {this.name ? <p>Hello {this.name}</p> : <p>Hello World</p> } </div> ); } Loops ใน JSX สามารถใช้ array operators : map ในการทำงานแบบ loop  จากตัวอย่างด้านล่าง มี lists ของ todo object ใน this.Objects ซึ่ง map function ทำหน้าที่ loop ในแต่ละ todo object ใน this.Objects แล้วสร้าง new JSX sub tree และ add เข้าไปใน array ที่จะ return ออกจาก map function ซึ่งจะเพิ่มเข้าไปใน JSX tree ด้านนอกนั่นคือ div element render() { return ( <div> {this.todos.map((todo) => <div> <div>{todo.taskName}</div> <div>{todo.isCompleted}</div> </div> )}

Read More »

เตือนภัยอีเมลหลอกลวงว่าเป็นธนาคารกรุงไทย (Spam 2018-11-14)

เช้านี้มีอีเมลหลอกลวงหลุดเข้ามา อ้างว่ามาจาก Krungthai Bank PCL ดังภาพ จะเห็นว่า From ก็หลอกว่ามาจาก info@ktb.co.th และในเนื้อหาก็มี Logo ของธนาคาร แถมมี Link  ที่วิ่งไป HTTPS://WWW.KTB.CO.TH/PERSONAL/DETAIL/VERIFY/172 แต่ไม่ใช่ของจริง !!! เพราะ ถ้าท่านดูอีเมลฉบับนี้แบบ HTML จะเป็นการส่ง Link ไปที่ “เว็บไซต์หลอกลวง” หรือเรียกว่า Phishing Site  ไม่แนะนำให้คลิกตาม https://scrappse.tk/jssl/ktbnetbank/krungthai/index.html ซึ่งจะได้หน้าตาเหมือนกับของธนาคารจริง ๆ เพราะมันไปใช้ภาพจากเว็บไซต์จริง และใช้ HTTPS และได้ “กุญแจ” ที่บอกว่า valid certificate อีกด้วย เพราะใช้ Let’s Encrypt ดังนั้นจึงแจ้งเตือนภัยมายังประชาคมให้รับทราบ ว่าปัจจุบันนี้ เห็น LINK ใน Email แล้วเป็น URL ชื่อของธนาคารจริง ก็ยังไม่พอ (กรณีนี้เป็นของ www.ktb.co.th) คลิกไป เจอหน้าเว็บ หน้าตาน่าเชื่อถือ ก็ไม่พอ (ตามภาพ เลียนแบบเหมือนมาก) ดูว่ามี “กุญแจ” ของ HTTPS ถูกต้องก็ไม่พอ (กรณีนี้ ได้กุญแจมาแล้ว แต่เป็นของเว็บไซต์หลอกลวง) ดังนั้น ต้องดูด้วยว่า URL ที่ท่านเห็นด้านบน เป็นของธนาคารจริง ๆ หรือไม่ !!! (ในกรณีนี้ ไม่จริง เพราะเป็นของ https://scrappse.tk ) ธนาคารกรุงไทย ได้แจ้งเตือนเรื่องนี้ไว้แล้วที่  https://www.ktb.co.th/th/krungthai-update/announcement-detail/162 ดังนั้น หากท่านได้รับ Email ในทำนองนี้ ให้ตรวจสอบกับธนาคาร หรือผู้เชี่ยวชาญก่อน เพราะคนร้ายจะหลอกให้ท่านกรอก Username/Password เพื่อเข้าสู่บัญชีธนาคารของท่านได้

Read More »