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

โปรแกรมจำลองการทำงานของโปรเซส

SOSIM by Prof.Luiz Paulo Maia
SOSIM by Prof.Luiz Paulo Maia

นั่งอ่านหนังสือ
ระบบปฏิบัติการ (Operating System)
ของ รศ.ดร.กฤษดา ขันกสิกรรม
พบบทที่ 9 การใช้งานโปรแกรมโซซิม (SOSIM)
โปรแกรมนี้นักศึกษา CS ป.โท ทำเป็นผลงาน Thesis
มีหน้าที่จำลองการทำงานของ process
แสดง Running, Ready และ Waiting ใน Process Manager
และการจองหน่วยความจำใน Memory Manager
ผู้ใช้สามารถสร้าง Process ขึ้นมา แล้วส่งในระบบ
จะเห็นการทำงานในแต่ละ State
และสร้าง Process ขึ้นมาได้ 3 แบบ

 

ประเภทของ Process มีดังนี้
1. CPU = ใช้ Central Processing Unit อย่างเดียว
2. IO = ใช้ CPU เป็นรอง แต่ใช้ IO เป็นหลัก มีหลายแบบ
3. MIX = ใช้ CPU ปานกลาง ไปพร้อมกับ IO

ต.ย. 1 โปรเซสเดียว
[สร้าง] Process แบบ CPU
Priority = 0, Max. frames =5
[ผล]
มี Process เดียว ก็สลับไปมาระหว่าง
Ready และ Running
และไม่ต้องเข้าคิวกับใคร จึงอยู่ที่ Ready = 0 เสมอ
[ล้าง Process ออก]
เข้า Process, Select, Delete
แล้วสั่ง Run ใหม่จะพบว่าไม่มีอะไรอยู่ใน Processor Manager

ต.ย. 2 โปรเซส CPU และ IO2
[สร้าง] Process แบบ CPU
แล้วสร้าง Process แบบ IO2
Priority = 0, Max. frames =5 เหมือนกันทั้ง 2 Process
[ผล]
มี Process CPU แทบจะครอง CPU
ส่วน Process IO2 ได้ทำงานใน CPU 1 ครั้ง
แล้วกับไปรอใน Waiting State ให้ CPU ทำงานให้เสร็จ 5 ครั้ง
แล้ว Process IO2 จึงจะได้ทำงาน 1 ครั้ง แล้วกลับมารอเหมือนเดิม
ใน Ready Process ที่ครองอยู่ก็คือ CPU
และมี Ready ระดับ 0 คือไม่มีใครมารอในคิวนาน ๆ

ต.ย. 3 โปรเซส CPU และ Mix1 และ IO2
[สร้าง] Process แบบ CPU
แล้วสร้าง Process แบบ Mix1
แล้วสร้าง Process แบบ IO2
Priority = 0, Max. frames =5 เหมือนกันทั้ง 2 Process
[ผล]
มี Process CPU แทบจะครอง CPU
ส่วน Process Mix1 ได้ทำงานใน CPU 2 ครั้ง เมื่อเข้า Ready ก่อนไป Wait
ส่วน Process IO2 ได้ทำงานใน CPU 1 ครั้ง แล้วไป Wait เลย
ทั้ง Mix1 และ IO2 จะรอใน Waiting State 5 ครั้ง เท่ากัน
แต่ Mix1 ได้ทำงานกับ CPU มากกว่า IO2 เมื่ออยู่ใน Ready state
[ดู Log]
หากดูการทำงานใน Log
จะพบว่า Boost คือ กำลัง
กำหนดให้ IO2 เป็น +2 แต่ Mix2 มี +1
ยิ่งบวกมากขึ้น ก็ยิ่งรอนานขึ้น

ต.ย. 4 โปรเซส IO1 และ IO2
[สร้าง] Process แบบ IO1
แล้วสร้าง Process แบบ IO2
Priority = 0, Max. frames =5 เหมือนกันทั้ง 2 Process
[ผล]
เมื่อ IO1 ทำงานเสร็จก็จะไปรอ
เมื่อ IO2 ทำงานเสร็จก็จะไปรอเช่นกัน
ทิ้งให้ CPU ว่าง ไม่มีใครใช้งาน

http://www.thaiall.com/os/os03.htm

มีรายละเอียดอีกมาก
เช่น การจัดการหน่วยความจำแบบ Pre-Paging หรือ Demand Paging
การดู Statistics หรือ PCB เป็นต้น
ถ้าสนใจก็เข้าโฮมเพจ SOSIM
ของ Prof.Luiz Paulo Maia as part of his M.Sc. thesis
in Federal University of Rio de Janeiro (NCE/UFRJ), Brazil, in 2001 (2544).
http://www.training.com.br/sosim/indexen.htm

ติดตั้ง plawan central log เพิ่มอีก 1 OS แทน boot แบบ Live CD

19 ก.ค.52 ติดตั้ง Plawan Central Log Beta2 ที่ download แฟ้ม .iso จาก plawan.com เมื่อ 17 กค.52 แล้วเขียนลง CD โดยมีขั้นตอนหลัง Boot ด้วย CD ของ Plawan เพื่อติดตั้งใน Asus T3400 ดังนี้ 1)Boot ด้วย CD-ROM ใช้เวลากว่า 10 นาทีกว่าจะ boot เสร็จ 2)Prepare disk space ผมเลือก Manual เพราะไม่แน่ใจว่าระบบอัตโนมัติแบ่งนั้นจะกระทบอะไร และผมก็ไม่ได้ใช้ HD ทั้งหมดสำหรับ Linux ตัวนี้ 3)เลือก Free space ใน Device สุดท้ายที่เคยใช้ Partition magic แบ่งไว้ ซึ่งมีทั้งหมด 44 GB แต่มีแผนใช้กับ Plawan เพียง 22 GB 4)แบ่ง Partition เป็น ext3 สำหรับ / หรือ root เพียง 20 GB 5)แบ่ง Partiton เป็น swap area เพียง 2 GB 6)เลือก Migrate Documents and Settings แล้ว checkbox เฉพาะของ sda1 หรือ Windows ตัวหลัก เพื่อนำมาใช้ใน plawan แต่ลูกของ sda1 ผมไม่ได้เลือกเลย ได้แก่ Internet explorer, Wallpaper, User Picture, My Documents, My Music และ My Pictures 7)จากนั้นก็ดำเนินการติดตั้ง ซึ่งทำให้เกิด Partition ทั้ง 2 ข้างต้น และมีการแก้ไข boot ใน sda ซึ่งใช้เวลาติดตั้งโปรแกรม และ download รวมชั่วโมงกว่า 8 ) เมื่อติดตั้งแล้ว ก็สั่ง restart จะพบว่า boot ด้วย grub ก่อน loader ของ windows

23 ก.ค.52  บันทึกผลการทดสอบใช้งาน plawan central log 2 เรื่อง คือ 1)การเข้า root ของ plawan จะเข้าผ่าน login ด้วย user root ไม่ได้ ต้องใช้ user ปกติเข้าไปก่อน เมื่อพบ Desktop ก็ให้ Right Click, Applications, Shells, sudo -i ถ้าใส่รหัสผ่านถูกก็จะพบเครื่องหมาย # เมื่อใช้ pwd ก็จะพบว่าอยู่ใน ห้อง /root (แหล่งอ้างอิง linuxthai.org) 2) ในระบบ Multi OS ผมต้องการ boot Windows ซึ่งอยู่ลำดับที่ 3 แต่ค่า default มี Plawan อยู่ลำดับที่ 0 ต้องเข้าไปใน /boot/grub แล้วเปิดแฟ้ม menu.lst ด้วย vi แล้วแก้ default 0 เป็น default 3 ก็จะเข้า Windows อัตโนมัติในกรณีไม่เลือก OS ตัวใด้