undefined ใน console ของ browser มาได้อย่างไร

เพื่อตอบคำถามว่า undefined
เมื่อสั่ง console.log(5); นั้น มาได้อย่างไร

undefined console in google chrome
undefined console in google chrome

http://www.thaiall.com/java/js01.htm

ก็คงต้องชวนอ่านเรื่อง และดูจากตัวอย่าง ต่อไปนี้

มีหลายวิธี
ในการเขียนโค้ด (code) และประมวลผล (run) การทำงานของโค้ดด้วยภาษา javascript อาทิ เขียนโค้ดแล้วบันทึกในแฟ้ม x.htm แล้วประมวลผลใน browser หรือ เขียนบน เว็บไซต์ที่บริการแบบ online หรือ เขียนโค้ดแล้วใช้ node.js เป็นตัวแปล (interpreter) หรือ เขียนใน console บน browser ซึ่งการเขียน code พื้นฐานและทดสอบใน console บน browser นั้น ถือว่าเป็นวิธีการที่ง่ายที่สุด เสมือนเขียน javascript บน IDE (Integrated Development Environment)

การเขียนใน console บน browser
หากเลือกใช้ chrome browser ก็เข้าสู่ console ด้วยการกด F12 หรือ Ctrl-Shift-I หรือเลือก Developer Tools จาก Menu bar จะพบหน้าต่างที่มีบริการหลายอย่าง อาทิ การเป็น inspector เพื่อดู sources, elements หรือดูค่าที่ปรากฎใน console หรือ รับคำสั่งประมวลผลใน console ซึ่งหน้าต่าง console มักรองรับการสั่งงานด้วยคำสั่ง console.log(…); เพื่อติดตามตรวจสอบ ตัวแปรที่ต้องการติดตาม เนื่องจากเว็บเพจมี javascript ในการประมวลผล หากต้องการทราบว่าข้อมูล ณ ตำแหน่งใด มีค่าใดแล้ว การใช้ console.log(…) จะเหมาะสมอย่างยิ่ง เพราะผลของคำสั่งนี้จะไม่แสดงผลใน webpage แต่จะแสดงผลใน console window ทำให้ทราบข้อมูลที่ต้องการ

ในกรณีรับคำสั่งประมวลผลใน console
หากส่งค่าให้คำนวณ เช่น 1 + 2 + 3 ก็จะ return 6 มาตามปกติ
แต่ถ้าใช้คำสั่ง console.log(1 + 2 + 3); มักพบคำว่า undefined ปรากฎขึ้นมาอีก 1 บรรทัดเสมอ เนื่องจาก console window มีหน้าที่หลัก เป็นพื้นที่ในการรองรับการประมวลผล และ return value
หากพิมพ์คำสั่งใด ก็ต้องมีการ return value เสมอ หากไม่ return value ก็จะทำการ return undefined ต่อท้ายทุกครั้ง และคำสั่ง console.log(..); ไม่มีการ return ค่าโดยตรง แต่เป็นการส่งค่ามาแสดงผลใน console window โดยตรง ซึ่งไม่ใช่การ return value

ตัวอย่างการทำงานใน console window กับการ return ค่า
ตามภาพการใช้คำสั่ง พบว่า ตัวอย่างที่ 1, 2 และ 6 จะ return ค่าให้ console ได้ปกติ ตัวอย่างที่น่าสนใจ คือ คำสั่งที่ 8 แม้จะพิมพ์เพียง ; คือ เสมือนไม่สั่งอะไรเลย ใน console window ก็ยังแสดงคำว่า undefined เพราะไม่มีการคืนค่าใด ตัวอย่างที่ 2 เป็นการประกาศ และกำหนดค่า จะมีการคืนค่าออกมา จึงแสดงเลข 5 เป็นผลลัพธ์ แต่ ตัวอย่างที่ 3 เป็นการประกาศค่า ที่ไม่คืนค่าหลังประกาศ เนื่องจากใช้ var จึงแสดง undefined ตัวอย่างที่ 4 และ 5 แม้ใช้ console.log() แต่การพิมพ์คำสั่งนี้โดยตรงใน console จะไม่คืนค่าให้ console window แต่แสดงผลทันที หากใช้คำสั่งนี้ใน javascript ก็จะส่งค่าให้กับ console window เพื่อแสดงผลได้ปกติ ซึ่งเป็นคนละสถานการณ์ ตัวอย่างที่ 6 สามารถรับคำสั่งได้หลายคำสั่ง แล้วทำทีละคำสั่ง แต่คำสั่งสุดท้ายต้องเป็นการคืนค่าโดยตรง จะสลับให้ console.log() อยู่บรรทัดสุดท้าย ก็จะพบคำว่า undefined เช่นเดิม

calculator on google
calculator on google

ภาพชุดนักศึกษารักการอ่าน ประจำปีการศึกษา 2560 ภาคเรียนที่ 1

This slideshow requires JavaScript.

ภาพชุดนักศึกษารักการอ่าน คือ กิจกรรมหนึ่งในวิชาสื่อและเทคโนโลยีสารสนเทศ ที่ให้นักศึกษาไปสืบค้นหนังสือที่ชอบในห้องสมุด นำมาอ่าน สรุปใจความสำคัญลงกระดาษ แล้วก็ถ่ายภาพกระดาษที่ได้สรุปเนื้อหาเหล่านั้น พร้อมกับถ่ายภาพตนเองระหว่างการอ่านหนังสือท่ามกลางกองหนังสือ จากนั้นก็ zip ผลงานทั้งหมดเป็นแฟ้มเดียว ส่งเข้าระบบอีเลินนิ่ง เมื่อเห็นภาพนักศึกษาตั้งใจถ่ายระหว่างอ่านหนังสือ ก็นำมาแชร์ต่อ เพราะเห็นเป็นเรื่องน่าชื่นชม

รักการอ่าน : http://www.thaiall.com/readbookt

แชร์ผ่าน photos google
ที่ https://photos.app.goo.gl/uJjXqkKvoZalZkim2

แชร์ผ่าน fan page
ที่ https://www.facebook.com/pg/ajarnburin/

 

รักการอ่าน
รักการอ่าน

การใช้บริการ Photos ของ Google.com เพื่อ Share Album สำหรับผู้มีบัญชีของ gmail.com สามารถ install app เพื่อเก็บ photos หรือ Video ใน cloud storage หรือ share ทั้งแบบ photo หรือ album แล้วยังสั่งเปิดแบบ slide show ได้

คำแนะนำการใช้งาน ดังนี้ 1) Sign in : http://photos.google.com 2) แล้วอัพโหลด 78 ภาพ ผ่าน Web browser 3) แล้วเลือก Add to Album, New album, พิมพ์ชื่ออัลบั้มแล้ว click เครื่องหมายถูกที่มุมบนซ้าย มีตัวอย่าง Album ที่ share เช่น “Love to read a book (2560-1)” , “โครงการ อพ.สธ-ม.เนชั่น” , “Miss Grand 2016” หรือ “Miss Grand 2017 (PWA)” “Fanpage สวนนายบู” สำหรับ Android : download

 

This slideshow requires JavaScript.


หลังอ่านหนังสือสักเล่ม ก็ต้องทบทวน ว่าในหนังสือมีอะไรดี สรุปออกมาอย่างน้อยสักหน้าให้รู้เรื่องราวความเป็นมาเป็นไป ก็น่าจะดี เป็นความคิดรวบยอดจากการอ่าน 
การเลือกหนังสือก็สำคัญ นักศึกษามักเลือกหนังสือที่สัมพันธ์กับสายของตนเอง (Major)
อาทิ
สาขารัฐประศาสนศาสตร์
สาขาสาธารณสุขศาสตร์
สาขาวิทยาการคอมพิวเตอร์
สาขาบัญชี
สาขาบริหาร
สาขานิเทศศาสตร์

แผนภาพบอกสัดส่วนชัดเลย มีหญิงไทยมากกว่าชายในไทย ดังนั้นชายเลือกได้มากกว่าหญิง .. จริงหรา

หญิงมีมากกว่าชาย
หญิงมีมากกว่าชาย

ที่เว็บไซต์ คนไทย.com มี Thailand Gateway มีข้อมูลทำให้เรารู้ว่าประเทศไทย มีคนไทยกี่คน วันนี้สนใจเรื่องการนำเสนอข้อมูลตัวเลข (Number) โดยใช้แผนภาพ (Diagram หรือ Chart) จะใช้ Google chart ทำ Pie chart เทียบหญิงกับชาย ว่ามีจำนวนเพศละกี่คน จากข้อมูลใน khonthai.com
พบว่า ประกาศสำนักทะเบียนกลาง
เรื่อง จำนวนราษฎรทั่วราชอาณาจักร ตามหลักฐานการทะเบียนราษฎร
ณ วันที่ 31 ธันวาคม 2558

คนที่มีสัญชาติไทย
มีชาย (Male) 31,865,175 คน
มีหญิง (Female) 33,064,910 คน
รวม 64,930,085 คน

http://www.thaiall.com/php/google_ajax_api_pie.htm

คนไทย.com มี Thailand Gateway มีข้อมูลทำให้เรารู้ว่าประเทศไทย มีคนไทยกี่คน
คนไทย.com มี Thailand Gateway มีข้อมูลทำให้เรารู้ว่าประเทศไทย มีคนไทยกี่คน

แล้วเมื่อเที่ยงของวันที่ 17 มกราคม 2560 นอกจากข้อมูลข้างต้น
ยังพบว่าเครื่องบริการข้อมูลของที่นี่ น่าจะใช้ Mysql
และใช้ภาษา PHP ที่รู้เพราะขณะโหลดข้อมูล
มีข้อความ Warning แจ้งให้ทราบ ว่าระบบฐานข้อมูลไม่ตอบตามปกติ
ก็เป็นกรณีศึกษาที่สามารถนำไปแบ่งปันในห้องเรียนได้
http://stat.bora.dopa.go.th/stat/y_stat58.htm

บริการ chart ของ google ผ่าน ajax api


มีเพื่อน .. ต้องการทำรายงานจากข้อมูล แล้วนำเสนอผ่านเว็บเพจ
เมื่อประมวลผลก็จะเป็นข้อมูลเชิงสถิติ หรือสารสนเทศ ที่จะช่วยสนับสนุนการตัดสินใจในเรื่องที่เกี่ยวข้องสำหรับสังคม การนำเสนอข้อมูลผ่าน chart เป็นเรื่องควรทำ เพราะดูง่ายกว่าเขียนอภิปรายสรุปผลแต่เพียงอย่างเดียว

https://google-developers.appspot.com/chart/interactive/docs/gallery

การนำเสนอ chart ในเว็บเพจมีกันหลายวิธี นั่งทบทวนการใช้ OFC (Open Flash Chart) อยู่พักหนึ่ง สุดท้ายก็ต้องยอมแพ้ เพราะ เส้นทางของ Flash ในอนาคต ดูจะตีบตันเหลือเกิน และ OFC ก็ไม่ได้พัฒนาต่อให้สมบูรณ์ ต่างกับ Google Chart ที่พัฒนาอย่างต่อเนื่อง และเลือกใช้งานได้หลากหลาย ตามความต้องการของผู้ใช้

ตัวอย่าง google ajax api
ตัวอย่าง google ajax api

จากการทดสอบ code ที่ใช้นำเสนอข้อมูลใน chart แต่ละแบบ ได้เก็บตัวอย่าง code ไว้เป็นไฟล์ และเก็บภาพตัวอย่าง chart เพื่อจะได้เลือกนำมาใช้ และนำ code มาปรับแก้โดยง่าย
ระบบนี้ไม่ต้องมี server เพราะจะเรียกไปยัง google.com โดยส่งข้อมูลผ่าน javascript code ทำงานแบบ AJAX คือ ประมวลผลร่วมกันระหว่าง client กับ google server มีตัวอย่าง chart แบบต่าง ๆ ดังนี้

 

google_ajax_api_annotation.htm
google_ajax_api_area.htm
google_ajax_api_bar.htm
google_ajax_api_bubble.htm
google_ajax_api_calendar.htm
google_ajax_api_candlestick.htm
google_ajax_api_column.htm
google_ajax_api_combo.htm
google_ajax_api_diff.htm
google_ajax_api_donut.htm
google_ajax_api_gantt.htm
google_ajax_api_gauge.htm
google_ajax_api_geo.htm
google_ajax_api_histrogram.htm
google_ajax_api_line.htm
google_ajax_api_lineinterval.htm
google_ajax_api_map.htm
google_ajax_api_org.htm
google_ajax_api_pie.htm
google_ajax_api_scatter.htm
google_ajax_api_table.htm
google_ajax_api_timeline.htm
google_ajax_api_trendline.htm
google_ajax_api_wordtree.htm

นั่งมองหน้าแรกของ google.com

google homepage
google homepage

1. วันนี้ดูหน้าแรกของ google.com
แล้วรู้สึกว่าบริษัท google ออกแบบหน้าแรกได้เรียบง่ายมาก
ประกอบกับได้พูดคุยกับเพื่อน เรื่อง scratch ที่รู้สึกว่าง่าย
ในการผ่าน 20 ด่านของ angry bird ที่เป็นเกมสำหรับเด็ก

https://studio.code.org/hoc/1
2. กลับมาดู google.com อีกครั้ง
คราวนี้ views source
พบว่าหน้าตาที่ดูว่างเปล่า กลับอัดแน่นด้วย javascript
ภาษาวัยรุ่นคงใช้คำว่า “จัดเต็ม

3. ภาพนี้ใช้เตือนสติ
ว่า ถ้าจะเขียนโปรแกรมใช้งานจริง
จะใช้หลักแบบ scratch ของ MIT หรือ blockly ของ Google
คงไม่สะดวก ที่จะเก็บรายละเอียด
ในระหว่างพัฒนาโปรแกรมได้หมด
เพราะมีรายละเอียดที่ต้องดำเนินการมากไป

4. หน้าแรกมี 343 บรรทัด
ดูแล้วบรรทัดที่ 341 จะยาวอยู่สักหน่อย
จากการ view source เมื่อ 12 ก.ย.59

ใช้ recaptcha กรอง spam จาก bot

recaptcha v.2
recaptcha v.2

มนุษย์เราสร้างโปรแกรมดีก็เยอะ ไม่ดีก็แยะ
โปรแกรมบางตัวทำตัวเหมือนมนุษย์แบบสปาย
พอจะเปิดบริการให้ใครเข้าถึงได้ ก็ต้องกรอง
ว่าคำขอใด เป็นของมนุษย์ หรือไม่ใช่ของมนุษย์
เดี๋ยวนี้ google บริการ recaptcha
ช่วยคัดกรองความเป็นมนุษย์

http://www.thaiall.com/captcha.php
แต่โปรแกรมที่จะใช้งานก็ต้องรองรับ recaptcha
ช่วงบ่ายวันนี้ ลองใช้ recaptcha v.2 ง่ายกว่า v.1 เยอะ
ใช้เครื่องที่ทำงาน กรองได้สบาย ทั้งเขียนง่าย และง่ายผู้ใช้
แต่บางเครื่องก็มีปัญหาใช้คำสั่งที่ใคร ๆ เขาใช้ .. ก็ไม่ได้
ต้องไปหาคำสั่งอื่นมาทดแทน สรุปว่าต้องไปใช้
ฟังก์ชัน curl แทน file_get_contents
เพราะเครื่องที่จะใช้ไม่บริการฟังก์ชันนี้
ปล.เครื่องที่มีปัญหา เช่าเค้าอยู่ อยู่กันมานานล่ะ

http://www.thaiall.com/captcha_click.php

ขั้นตอน
1. เตรียม Server ที่รองรับ PHP
2. สมัครใช้ recaptcha จาก google.com
3. กำหนด host name และ domain name ที่ใช้
4. คัดลอก public & private key ไปใช้ใน code
5. เขียน code คือ form กับ verify
6. ทดสอบ และใช้งาน

ดาวน์โหลดภาพจาก FB ไปเก็บไว้ใน photos.google.com

pan cake
pan cake

เคยเห็นเพื่อนถ่ายภาพ และแบ่งปันภาพ ผ่านเครือข่ายสังคม
เป็นพฤติกรรมที่เกิดขึ้นหลายครั้ง จนผมเรียกว่าปรากฎการณ์
เท่าที่เห็นมา ภาพเหล่านั้นมีความสำคัญ
ด้วยเชื่อว่าภาพเหล่านั้นสำคัญ และไม่ต้องการให้หายไปในอนาคต
และต้องการสำเนาไว้นอกแหล่งเดิม และแบ่งปันเป็นสาธารณะ
จึงน่าจะคัดลอกมาเก็บไว้ แล้วไปแบ่งปันในสังคมอื่น หรือสื่ออื่น
อาจเปิดเป็น gallery ให้ใคร ๆ เข้าชมก็น่าสนใจ
จึงเสนอเพื่อนให้ดำเนินการดังนี้
1. ใน page กับ timeline ยกเว้น group นั้น
มีบริการ download album มาได้ทั้งอัลบั้ม
คือ คัดลอกภาพทั้ง album ออกมาเป็น .zip ได้
2. ภาพในแฟ้ม .zip จะเรียงลำดับตามตัวเลข
เริ่มต้นจาก 1 ไปเรื่อย ๆ เมื่อส่งภาพใหม่เพิ่มเข้าไปในอัลบั้ม
และดาวน์โหลดอัลบั้มใหม่ พบว่า ภาพใหม่จะมีเลขต่อท้ายภาพเดิม
หากในอัลบั้มมีภาพจำนวนมาก ก็ไม่ต้องเกรงว่าจะสับสนในภายหน้า
การเรียงภาพใหม่ต่อท้ายภาพเดิมทำให้ไม่สับสน
แต่วันที่ของภาพใน .zip จะเป็นวันที่ download ไม่มีวันที่ upload มาด้วย
3. มีบริการเก็บภาพโดยผู้ให้บริการรายอื่นอีกมากมาย
แต่ของ http://photos.google.com ซึ่งเป็นอีกบริการหนึ่งของ google
สามารถเชื่อมต่อกับ smartphone ช่วยให้เราสำรอง และแบ่งปันได้ง่าย
มีแอพทั้ง Google play บน Android และ App store บน iOS
เมื่อเก็บไว้แล้ว หากต้องการภาพไปใช้ก็มีบริการ Download Album โดยง่าย
จุดดีของแฟ้มภาพใน .zip ของ google คือ วันที่อัพโหลดยังอยู่
4. หลังเก็บใน photos แล้ว
ก็ยังนำภาพแชร์เป็น gallery ได้โดยง่ายเช่นเดียวกับบริการของค่ายอื่น
แต่ลิงค์จากการแชร์จะเป็น short url เมื่อแปลงเป็น full url แล้ว
ก็ยังไม่สามารถนำไปใช้ใน iframe หรือ frame ได้ ต้องเปิดเป็น top frame
5. เนื่องจากผมมีบัญชีของ gmail.com อยู่แล้ว ก็ใช้ซะเลย ไม่ได้ใช้ค่ายอื่น
เป็นการทบทวน และจัดระเบียนภาพใน FB ไปพร้อม ๆ กัน
เช่น
ภาพชุด “ประชุม 580914-15 ประชุมเหล้าบุหรี่ กทม.
https://goo.gl/photos/KacxawnuJdPrikhe8
ภาพชุด “NW
https://goo.gl/photos/oxJQX1CKuPKMxmhJ7

ก่อน และหลัง
ก่อน และหลัง

[นิยามศัพท์]
พฤติกรรม (Behavior) คือ การแสดงและกิริยาท่าทาง ที่เป็นการตอบสนอง
ของระบบหรือสิ่งมีชีวิตต่อสิ่งเร้าหรือการรับเข้าทั้งหลาย
ไม่ว่าจะเป็นภายในหรือภายนอก มีสติหรือไม่มีสติระลึก
ชัดเจนหรือแอบแฝง และโดยตั้งใจหรือไม่ได้ตั้งใจ [wiki]
ปรากฏการณ์ (Phenomenon) คือ สิ่งที่อุบัติขึ้น และปรากฏให้เห็น

ปรับ nginx และ application บน amazon cloud กับ google cloud

พักนี้ช่วยเพื่อนดู cloud ของ google กับ amazon
เพราะย้ายบริการระหว่าง cloud ทั้ง 2 ตัว ให้ทำงานกับ wordpress
แล้วพบปัญหาบางอย่างจาก google cloud เกี่ยวกับ
การรองรับ static file หลายร้อย gigabyte กับฐานข้อมูล 20 กว่า gigabyte
และ plug-in ของ wp โหด ๆ อีก 2 – 3 ตัว มีการรายงานพบปัญหา 502 ตลอด
http://aws.amazon.com และ http://cloud.google.com
เหตุที่บันทึกเรื่องราวไว้ เผื่อว่าเพื่อนกลับมาถามอีก จะได้ดำเนินการอีกครั้ง
มีประเด็นแบ่งปัน ดังนี้
1. มีปัญหาเรื่องการ redirect ไปหน้าอื่นของ wordpress ไม่ได้เลย
ต้องเข้าไปแก้ nginx.conf ในบรรทัดที่กำหนดว่า
try_files $uri $uri/ /index.html;
เป็น try_files $uri $uri/ /index.php?$args;
2. ส่วนการเข้า shell ในแต่ละ cloud ก็ต่างกันไป
สำหรับ google cloud ผมจะเข้า control panel แล้วคลิ๊ก ssh
ก็จะเข้า secure shell ได้เลย
แต่กับ amazon cloud เพื่อนจะส่งแฟ้ม .ppk ซึ่งเป็น private key file for authentication
แล้วแจ้ง user name กับ ip ให้ใช้โปรแกรม putty เข้า port 22 ไปจัดการระบบ
เข้าไปก็ใช้ sudo su เป็น root ได้เลย เรื่องนี้เป็นการเริ่มต้นใน cloud แต่ละตัวของผม
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
http://www.select2web.com/webservice/amazon-elastic-computer-clound-ec2-part-6-putty-login.html
3. จากนั้นก็ config ให้ ftp เข้าไปแล้วส่งแฟ้มผ่าน user ชื่อ bitnami ได้เลย
ซึ่ง google cloud มีเรื่องต้องกำหนดเกี่ยวกับ permission หลายจุด
แต่ที่เหมือนกันกับ amazon cloud คือ การทำ link มายัง home ของ user
ผมจะเข้าห้อง /home/bitnami
แล้วใช้คำสั่งว่า /home/bitnami# ln -s /opt/bitnami/nginx/html
พอเพื่อน ftp เข้ามาก็เห็นห้อง html แล้วโยนไฟล์เข้าไปใน html directory ได้เลย
4. เพื่อนอยากใช้ memcached ไม่ใช่ memcache บน wordpress
ก็ย้าย host มาหลายตัว จาก dreamhost.com เป็น google cloud และมาเป็น amazon cloud
ก็ได้ help ของ bitnami ช่วยไว้ เพราะ package ที่เลือกไว้ก็ใช้ bitnami
https://wiki.bitnami.com/Components/PHP?highlight=install+memcached#How_to_install_Memcached_module_using_libmemcached_library.3f
5. การ config ให้ใช้งาน php บน nginx ของแต่ละ server ก็ไม่เหมือนกัน
ของ amazon cloud ผลใช้ config ด้านล่างนี้

location ~ \.php$ {
root           html;
fastcgi_read_timeout 300;
fastcgi_pass   unix:/opt/bitnami/php/var/run/www.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $request_filename;
include        fastcgi_params;
}

6. รหัสผ่านของ root บน MySQL server แต่ละตัวก็จะไม่เหมือนกัน
ก็พบคำแนะนำว่าใช้รหัสผ่านคือ bitnami สำหรับกรณีแรก กรณีอื่นก็ตามรายละเอียดข้างล่าง
https://wiki.bitnami.com/Components/MySQL#How_to_connect_to_the_MySQL_database.3f
The default password for MySQL root user in Virtual Appliances and AMIs is “bitnami”
The default password for MySQL root user in BitNami Cloud Hosting is the same that you set in the administration panel.
The default password for MySQL root user in a BitNami Magento stack is “bitnami1”

7. ใช้ amazon cloud ระบบกำหนดให้เปิดบริการ apache เป็น default
แต่ถ้าจะเปิด nginx เป็น port 80 ด้วยก็ได้ แต่ต้อง config กันหน่อย
เข้าไป config แบบ manual ดูจาก https://wiki.bitnami.com/Components/Nginx
แล้วเข้าไปแก้แฟ้ม config เปลี่ยน port กันทีละแฟ้ม
/opt/bitnami/apache2/conf/httpd.conf จาก 80 เป็น 8088
/opt/bitnami/nginx/conf/nginx.conf จาก 8088 เป็น 80
/opt/bitnami/nginx/conf/nginx.conf จาก 1234 เป็น 80

แล้วสั่ง #service bitnami restart เท่านี้ nginx ก็ตื่นมาบริการผ่าน port 80 แล้ว
8. การ import ข้อมูลขนาดใหญ่หลาย GB เข้า mysql
ที่มองไว้มี 2 วิธี
วิธีที่ 1. ใช้ ftp ส่งแฟ้ม .txt เข้าไปใน server
แล้วใช้คำสั่ง mysqlimport แต่เหมาะกับ csv
http://www.thegeekstuff.com/2008/10/import-and-upload-data-to-mysql-tables-using-mysqlimport/
วิธีที่ 2. หลัง upload .sql ก็ใช้คำสั่งข้างล่างนี้
#mysql -u root -ppassword databasename < filename.sql
เป็นการประมวลผลฝั่ง server
ไม่ใช่ประมวลผลระหว่าง server กับ client
ด้วยการยิงเข้าไปทีละระเบียน เน็ตหลุดก็แย่เลย

aws dynamodb failures
aws dynamodb failures

อีกเรื่องที่น่าสนใจ
ระบบฐานข้อมูล DynamoDB ของ Amazon ล่มเมื่อเช้าวันอาทิตย์ที่ 20 ก.ย.58
ทำให้ Netflix.com เว็บบริการดูหนัง และอีกหลายเว็บไซต์มีปัญหา
โดยเฉพาะ US-East data center complex in Ashburn, Virgina.
http://fortune.com/2015/09/20/amazon-cloud-snafu/

ช่วยเพื่อน config ให้ใช้งาน ftp ใน google cloud ได้ ครั้งที่สอง

google cloud
google cloud

มีโอกาสช่วยเพื่อน config Linux ซึ่งอยู่ใน google cloud
หรือ http://cloud.google.com ให้สามารถใช้ ftp
สำหรับ upload script เข้าไปในระบบ
ครั้งนี้เป็นครั้งที่สอง ดีกว่าครั้งแรก เพราะใช้ user bitnami ที่มีอยู่
แต่ครั้งแรกคลำทางไม่ถูก สร้าง user ใหม่ เข้าไปครอบ folder เดิมเลย
.. แต่ก็พอใช้งานได้ครับ สรุปว่าต้องใช้ bitnami ถึงจะถูกแนวที่เขากำหนดไว้

ขั้นตอนเริ่มต้นก่อนเข้า ssh (Secure shell)
1. เข้า Compute, Compute Engine, VM instances
2. พบ instance ที่สร้างขึ้น ของเพื่อนผมเป็น nginxstack
3. ในบรรทัดนั้นมีคำว่า default ใต้ network ก็เข้าไป
4. เพิ่ม default-allow-ftp
มี Allowed protocols / ports เป็น tcp:21
มี Source tag/ IP range เป็น 0.0.0.0/0 เพื่ออนุญาตจากที่ใด เฉพาะ port ที่กำหนด
มี Target Tags เป็น Apply to all targets
ขั้นตอนการเข้าจัดการด้วย secure shell
#sudo su
#cd /etc
#vi vsftpd.allowed_users
เปลี่ยนจากผู้ใช้ชื่อ bitnamiftp เป็น bitnami
#vi vsftpd.conf
เพิ่ม # หน้า listen_address=127.0.0.1
#cd /etc/init.d
#./vsftpd restart
#passwd bitnami
#ln -s /opt/bitnami/nginx/html html
#cd /opt/bitnami/nginx/conf/bitnami
#vi bitnami.conf
แล้วเติม index.php ไปหลัง index
เดิม index index.html index.htm;
เป็น index index.php index.html index.htm;
#/etc/init.d/bitnami restart

เพื่อให้แน่ใจผม upload index.php มี phpinfo() เข้าไป
เพื่อให้เห็นว่า php ทำงาน จะได้ติดตั้ง app ต่าง ๆ ได้

Blockly คือเครื่องมือช่วยพัฒนาโปรแกรมแบบวิชวล

blockly
blockly
1. ที่มา
Blockly คือ เครื่องมือพัฒนาโปรแกรมแบบวิชวล (Visual) โดยใช้สัญลักษณ์ภาพแบบจิ๊กซอล แทนคำสั่งมาเรียงต่อกันตามเงื่อนไขที่ต้องการ พัฒนาโดย google for education แล้วเปิดให้ทดลองใช้ (Try Blockly) บนเว็บของกูเกิ้ล หรือนักพัฒนาจะดาวน์โหลดไปติดตั้งบน website ของตนเอง เพื่อพัฒนาต่อยอดได้ ในเครื่องมีอนี้มีกลุ่มของสัญลักษณ์ที่ประกอบด้วย Logic, Loops, Math, Text, Lists, Colour, Variables, Functions
2. รับโปรแกรม (get the code)
โดย download แฟ้ม .zip เมื่อแตกแล้วก็นำไปวางบน server ที่บริการภาษา python
หน้าตาที่ได้ก็จะเป็น blockly แบบที่พบได้ใน demo ซึ่งจะทำงานบน client-side
3. Playground on the demo sever.
บริการใช้งาน Blockly แล้วสร้างเป็น source code : javascript แล้วคัดลอกออกมาได้
เพื่อนำไปใช้ใน compiler ต่อไปได้ แต่ทดสอบประมวลผลไม่ได้
4. บริการ Live Demo : JS Interpreter
สำหรับทดสอบประมวลผล Blockly และรายงานผลผ่านสัญลักษณ์ print ได้
แต่ copy : javascript ไม่ได้
5. code editor + run
ที่ block แล้วมองเห็น code ภาษาต่าง ๆ ทั้ง block, javascript, python, dart, xml
แล้วสั่ง run เพื่อดูผลลัพธ์ หรือ copy code ไปใช้ได้
6. มี Demos ให้ทดสอบการใช้งาน Blockly แบบต่าง ๆ
สร้างเครื่องบิน หรือ code editor ที่สลับไปมาระหว่าง source กับ symbol
7. ตัวอย่างบริการ blockly จากเว็บไซต์ต่าง ๆ
เช่น Blockly Games ใช้สร้างเกมง่าย ๆ ได้
หรือ Appinventor สำหรับ Android apps
8. ตัวอย่าง XML
<xml>
<block type=”variables_set” id=”642″ inline=”true” x=”-51″ y=”18″>
<field name=”VAR”>a</field>
<value name=”VALUE”>
<block type=”text” id=”643″>
<field name=”TEXT”>a</field>
</block>
</value>
<next>
<block type=”controls_repeat_ext” id=”644″ inline=”true”>
<value name=”TIMES”>
<block type=”math_number” id=”645″>
<field name=”NUM”>5</field>
</block>
</value>
<statement name=”DO”>
<block type=”text_append” id=”646″ inline=”false”>
<field name=”VAR”>a</field>
<value name=”TEXT”>
<block type=”text” id=”647″>
<field name=”TEXT”>b</field>
</block>
</value>
</block>
</statement>
<next>
<block type=”text_print” id=”648″ inline=”false”>
<value name=”TEXT”>
<block type=”variables_get” id=”649″>
<field name=”VAR”>a</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</xml>