วันพุธที่ 16 มีนาคม พ.ศ. 2559

รีวิว jaguarboard

รีวิว jaguarboard


ในยุค lot (internet of thing ) ราคาอุปกรณ์คอมพิวเตอร์มีราคาถูกน่าใจหาย ทำให้เกิดบอร์ดต้นแบบสำหรับนักพัฒนาออกสู่ตลาดจำนวนมาก บอร์ดที่จุดประกายแรกคือ raspberry pi ในราคาต่ำกว่า 100 เหรียญสหรัฐ จากวันนี้ ค่าย JAGUAR ELECTRONIC ได้สร้างบอร์ดที่มีความสามารถรันระบบปฏิบัติการได้หลากหลาย เช่น android, windows, Linux เป็นต้น และเมื่อปลายปี 2558 ทางค่ายได้เปิดตัวใน kickstart.com และได้ประสบความสำเร็จในระดมทุน เมื่อวันที่ 3 กุมภาพันธ์นี้ และได้จัดส่งให้ผมวันที่ 10 มีนาคม เนื่องจากเป็นบอร์ดต้นแบบรุ่นแรกๆ ที่ใช้ Intel CPU ที่ราคาไม่แพงและมีประสิทธิ์ภาพสูงเพียงพอต่อการรันระบบปฏิบัติการใหญ่ๆ ได้
                ผู้เขียนดำเนินการรีวิว คุณสมบัติหลักๆของบอร์ด jaguarboard โดยเปรียบเทียบกับ raspberry pi 2,3 และ คอมพิวเตอร์โน้ตบุ๊กบางรุ่นเพื่อให้เห็นถึงประสิทธิภาพบอร์ดชัดเจน โดยแบ่งเป็นหัวข้อดังต่อไปนี้

โครงสร้างบอร์ด jaguarboard

 

ระบบปฏิบัติการที่รองรับ นอกจากนั้นยังรองรับ android (remix os)

การเปรียบเทียบคุณสมบัติที่สำคัญของบอร์ด jaguarboard
                บอร์ด jaguarboard มีจุดเด่นที่ใช้ Intel CPU ทำให้ง่ายต่อการพัฒนาโปรแกรมที่ควบคุมและรองรับระบบปฏิบัติการหลักได้ดี และมี eMMC จำนวน 16 G ทำให้สะดวกต่อการพัฒนา พร้อมทั้งมี BIOS คล้ายกับคอมพิวเตอร์ยุคปัจจุบัน แต่มีจุดเสียคือ การมี GPIO น้อยมากเพียง 4 ขาซึ่ง3 ขา บอร์ดต่อเป็นสวิทช์เป็นทางเลือกเพื่อความสะดวก เมื่อมี GPIO น้อยผู้พัฒนาบอร์ดจัดทำเอกสารทางเว็บไซต์มีตัวอย่างการเชื่อมต่อบอร์ดกับ arduino ผ่าน I2C ทำให้สามารถขยาย GPIO ได้
 

ขนาดบอร์ดเมื่อเทียบกับ raspberry Pi

                ขนาดบอร์ด jaguarboard มีขนาดประมาณกระเป๋าพกผู้ชาย ซึ่งจะใหญ่กว่า raspberry Pi ( มีขนาดเท่ากับบัตร ATM ) ประมาณด้านละ 2 ซม ด้านบนมีฮีตซิงค์ระบายความร้อนขนาดใหญ่ซึ่งเทียบกับ raspberry Pi ทำให้ต้องมีระยะห่างจากด้านบนพอสมควร เพื่อให้มีอากาศถ่ายเท  ด้านหลังบอร์ดจะมีพอร์ตสัญญาเสียงและไมค์ทำให้นูนกว่า raspberry PI จากข้อจำกัดทั้งสองด้าน ทำให้กล่อง jaguarboard ต้องมีความหนามากกว่า raspberry Pi
 

ด้านหน้า บอร์ด jaguarboard , raspberry pi3 ,raspberry pi 2

 
ด้านหลัง บอร์ด jaguarboard, raspberry pi3, raspberry pi2

การทดสอบประสิทธิภาพของ jaguarboard บน linux

                การวัดประสิทธิภาพของ jaguarboard โดยเลือกระบบปฏิบัติการ Linux ค่าย debian รุ่นล่าสุดของแต่ละบอร์ด ขณะทดสอบต้องรัน Xwindows  เพื่ออยู่ในสถานการณ์ทำงานทั่วไป ( คล้ายกับการทดสอบประสิทธิภาพบนระบบปฏิบัติการ windows และเลือกโปรแกรม hardinfo ซึ่งเป็นโปรแกรมโอเพ่นซอร์ส บน linux แต่พบว่า ข้อจำกัดของโปรแกรมทำงานบนหนึ่งคอร์เท่านั้น
ในการทดสอบได้โปรแกรมที่มากับ debian ไม่ได้คอมไพล์ใหม่

              ทดสอบ CPU blowfish  ( ค่าวินาทีที่ทำงานเสร็จ ตัวเลขน้อยยิ่งดี )

                พบว่า jaguarboard ทำงานได้เร็วว่า raspberry Pi3 8 เท่า แต่ raspberry Pi2 และ 3 ใช้เวลาใกล้เคียงกันมากแตกต่างกันไม่ถึงหนึ่งวินาที
 

การทดสอบ CPU CryptoHash  (ค่า Mbit/sec ค่ามากยิ่งดี)

                พบว่า Jaguarboard มีค่ามากกว่า raspberry Pi3 7.6 เท่า ส่วน raspberry Pi3 เร็วกว่า Pi2  16.74%
 

การทดสอบ CPU Fibonacci (ค่าค่าวินาทีที่ทำงานเสร็จ ตัวเลขน้อยยิ่งดี)

                พบว่า jaguarboard ทำงานเร็วกว่า raspberry Pi3 เป็น 2.67 เท่า แต่เร็วกว่า Pi2 2.24 เท่า และพบว่า raspberry Pi2 ทำงานได้เร็วกว่า raspberry Pi3 อยู่ 19.07 %

การทดสอบ CPU ( N Queen )  (ค่าค่าวินาทีที่ทำงานเสร็จ ตัวเลขน้อยยิ่งดี)

                พบว่า jaguarboard เร็วกว่า raspberry Pi3 เป็น 1.8 เท่า และเร็วกว่า Pi2 2.01 เท่า  raspberry Pi3 เร็วกว่า PI 2 10.44 %               

การทดสอบ FPU (FFT) )  (ค่าค่าวินาทีที่ทำงานเสร็จ ตัวเลขน้อยยิ่งดี)

                พบว่า jaguarboard (intel) มีประสิทธิภาพดีกว่า raspberry Pi3 ,Pi2 เป็น  10.94 เท่า ,11.37 เท่า

การทดสอบ FPU Raytracing )  (ค่าค่าวินาทีที่ทำงานเสร็จ ตัวเลขน้อยยิ่งดี)

                พบว่า jaguarboard มีประสิทธิภาพดีกว่า raspberry Pi 3,Pi2 เป็น 2.85 เท่า, 4 เท่า ตามลำดับ และพบว่า Pi3 เร็วกว่า Pi2 อย่างเห็นได้ชัดเจน
 
สรุปการทดสอบ CPU ส่วนแรก พบว่า jaguarboard ( Intel ) สามารถทำงานคำสั่งบิตได้ดีกว่า raspberry Pi ( ARM )เยอะมาก โดยพิจารณาจาก blowfish และ crytohash เป็นการทำงานเข้ารหัสข้อมูลซึ่งต้องใช้คำสั่งประเภทบิตจำนวนมาก และ jaguarboard ( Intel ) ทำงานได้ดีกว่าประมาณ 1.5-2 เท่า raspberry Pi ( ARM ) เมื่อทำงานการคำสั่งคณิตศาสตร์พื้นฐาน โดยพิจารณา fibonacci และ n-queen ซึ่งเป็นการคำนวณหาค่าฟิโบน่าซี และการคำนวณ N-queen ซึ่งใช้คำสั่งคณิตศาสตร์จำนวนเต็มและคำสั่งกระโดดไปทำงานคำสั่งที่กำหนด
การทดสอบ CPU ส่วนที่สองเป็นการทดสอบการคำนวณตัวเลขทศนิยม พบว่า jaguarboard (Intel) ยังทำได้ดีกว่าประมาณ สองเท่า และพบว่า คอร์ด A53(Pi3) มีประสิทธิภาพสูงกว่า A7 อยู่ 28.78 % ในการทดสอบ Raytracing

การทดสอบบน windows 10

                พบว่า jaguarboard 2584 K node/sec ซึ่งผลการทดสอบดีมากกว่า โน้ตบุ๊ก Acer es14 ราคาต่ำกว่าหมื่น  ( 1111 kilo nodes/sec)


การทดสอบการใช้งานปกติ
                สามารถใช้งานอินเตอร์เน็ตได้ดี พร้อมดู YouTube ที่ความละเอียด HD ได้  ด้วย jaguarboard มีความรองรับ windows สามารถลงเพื่อดูหนังผ่านระบบอินเตอร์เน็ต หรือใช้แทนคอมพิวเตอร์ทั่วไปได้ แต่ด้วยหน่วยความจำที่มีจำนวนน้อยอาจทำงานช้ากว่าปกติ เมื่อเรียกใช้หลายโปรแกรมพร้อมกัน

สรุปข้อดี

1.       ราคาถูก (82เหรียญ หรือประมาณ 2900)มีประสิทธิภาพสูง พอเพียงสำหรับงานทั่วไป ที่เล่นอินเตอร์เน็ต ดู YouTube
2.       รองรับหลากหลายระบบปฏิบัติการ
3.        ใช้พลังงานไฟฟ้าน้อยกว่าโน้ตบุ๊ก
4.       สามารถเขียนโปรแกรมความคุม hardward ได้ มีGPIO 12C

ข้อเสีย

1.       มีหน่วยความจำน้อยไปสำหรับงานที่เปิดหลายโปรแกรมพร้อมกัน หรือทำงานกราฟิก
2.       มี USB น้อยไปหน่อย และการแสดงผลออกได้เพียง HDMI เท่านั้น
3.       มี GPIO น้อยและไม่มี A2D (analog input)

ขอบคุณที่ช่วยเหลือ


ขอบคุณสถานที่
                

วันเสาร์ที่ 31 ตุลาคม พ.ศ. 2558

การเพิ่มประสิทธิภาพของ SQLite



  1.  จัดเก็บข้อมูลเท่าที่จำเป็นเท่านั้น เพราะในเวลาที่ประมวลผล SQLite ต้องอ่านและเขียนข้อมูลจากพื้นที่จัดเก็บทุกครั้ง ถ้ามีอ่านข้อมูลจำนวนน้อยๆ ข้อมูลนั้นจะอยู่หน่วยความจำซึ่งจะทำงานได้ประสิทธิภาพสูง
  2. พยายามหลีกเลี่ยงการใช้งาน ทรานแซ็คชั่น transaction เพราะการทำงานแต่ละคำสั่ง มีการอ่าน อ่านซ้ำ เขียนและจัดเก็บไฟล์ข้อมูลที่เปลี่ยนแปลง ซึ่งทำให้การทำงานช้ากว่าที่ไม่มีทรานแซ็คชั่น
  3. การสร้างดัชนีให้มีประสิทธิภาพ ดัชนีช่วยให้การค้นหาข้อมูลรวดเร็วขึ้น มีแนวทางพิจารณาต่อไปนี้
    • ดัชนีช่วยเพิ่มประสิทธิภาพในการอ่านข้อมูล ช่น คำสั่ง select แต่จะลดประสิทธิภาพในการแก้ไขข้อมูล ถ้าตารางมีการแก้ไขข้อมูลบ่อยอาจทำให้การทำงานช้าลง
    • ลำดับคอลัมน์ในดัชนีมีความสำคัญมา ควรเรียงตาม คอลัมน์ที่ใช้ในส่วน where  และควรเรียงลำดับตาม order by
    • ควรสร้างดัชนี ของทุกคอลัมน์ที่ใช้ค้นหา ( ในส่วน where หรือ join  )
    • ในกรณีที่สร้างดัชนีที่ไม่ซ้ำกัน เช่น primary key SQLite ทำงานได้รวดเร็วมาก เพราะดัชนีจะอ้างอิงกับข้อมูลในตารางโดยตรง
  4. ควรสร้างตารางให้เล็กที่สุด เพราะทำให้ประหยัดเนื้อจัดเก็บข้อมูล และทำให้การทำงานเร็วขึ้น
  5. การใช้ชนิดข้อมูล BLOB ใน SQLite จัดเก็บข้อมูลแยกออกจากข้อมูลอื่นๆในตาราง ถ้าข้อมูลที่ต้องจัดเก็บมีขนาดใหญ่มาก (มากกว่า 1 k ไบต์) ควรสร้างเป็นไฟล์ที่ใช้ในการจัดเก็บข้อมูลและจัดเก็บชื่อไฟล์ข้อมูลนั้นแทน เช่น ข้อมูลรูปภาพ บทความขนาดใหญ่
  6. ถ้าต้องการใช้ข้อมูลชั่วคราว และถูกลบอัตโนมัติทุกครั้งที่ รีสตาร์ทใหม่ ควรใช้คำสั่ง CREATE TEMP  แทน TABLE CREATE TABLE
  7. ควรเลี่ยงการใช้คำสั่งประเภท subquery ใน SQLite ทำงานโดยสร้างตารางชั่วคราวมาจัดเก็บข้อมูลก่อน ( ซึ่งต้องมีการอ่านเขียนไฟล์ ) ทำให้การทำงานช้าลง
  8. ควรใช้คำสั่ง VACUUM เพื่อจัดเรียงข้อมูลในฐานข้อมูลทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลจำนวนมาก หรือเป็นระยะๆ คำสั่ง VACUUM ทำให้ไฟล์ฐานข้อมูลมีขนาดเล็กลงและทำงานเร็วขึ้น
  9. ลำดับคอลัมน์ในตารางมีความสำคัญมากต่อประสิทธิภาพการทำงานโดยรวม เพราะ SQLite จะทำค้นหาข้อมูลทีละคอลัมน์ตามลำดับใน schema ( ลำดับในคำสั่งสร้าง CREATE TABLE ) ดังนั้นควรเรียงตามความสำคัญในการค้นหาข้อมูลหรือใช้เป็นเงื่อนไขคำสั่งและควรมีเรียงลำดับความสำคัญและขนาดพื้นที่ข้อมูล  และข้อมูลที่มีขนาดใหญ่และไม่ได้ใช้ในเงื่อนไขการทำงานควรอยู่ลำดับท้ายๆๆฟฟๆฟฟๆ
จาก http://docs.blackberry.com/en/developers/deliverables/17952/BP_Optimizing_SQLite_database_performance_1219781_11.jsp

วันจันทร์ที่ 19 ตุลาคม พ.ศ. 2558

การใช้งาน sqlite เบื้องต้น

การใช้งาน sqlite เบื้องต้น

Sqlite เป็นโปรแกรมจัดการฐานข้อมูลที่มีขนาดเล็กมาก และเป็นที่นิยมในการพัฒนาฐานข้อมูลในมือถือทุกค่าย ซึ่งโปรแกรม sqlite รองรับภาษา sql และรองรับภาษาไทยด้วย แต่เนื่องจาก คู่มือภาษาไทยหายาก เลยเขียนให้เพื่อนเริ่มต้นได้รวดเร็วมากขึ้น ในคอมมานด์ไลน์ คำสั่งควบคุมระบบจะขึ้นต้นด้วยจุดตามด้วยคำสั่ง และผู้ใช้งานสามารถป้อนคำสั่ง sql ได้โดยมีเครื่องหมาย “;” ระบุว่าสิ้นสุดคำสั่ง
หลังจากโหลดโปรแกรม คอมมานด์ไลน์จาก www.sqlite.org  เราจะได้ไฟล์ sqlite3.exe มาหนึ่งไฟล์

การสร้างฐานข้อมูล

                คำสั่ง sqlite <ชื่อไฟล์ฐานข้อมูล> ตัวอย่างเช่น sqlite3 testdb.dbs
                ชื่อไฟล์ฐานข้อมูล เราสามารถกำหนดนามสกุลเองได้ และถ้าไม่มีนามสกุลก็ได้ จะอยู่โฟลเดอร์เดียวกับ sqlite3 ผู้ใช้งานสามารถกำหนดตำแหน่งไฟล์ได้ โดยระบุก่อนชื่อไฟล์ เช่น D:\database\testdb.dbs
การใช้เรียกใช้งาน sqlite3   และการเปิดฐานข้อมูล
                คำสั่ง .open <ชื่อไฟล์ฐานข้อมูล>
                โปรแกรม sqlite จะทำการปิดฐานข้อมูลที่ใช้งานอยู่และเปิดไฟล์ฐานข้อมูลใหม่ ผู้ใช้งานสามารถ พิมพ์คำสั่ง sql ได้โดยมีเครื่องหมาย “;” ระบุว่าสิ้นสุดคำสั่ง
หรือรันโปรแกรม sqlite3 พร้อมกับเปิดฐานข้อมูล
                คำสั่ง sqlite3 <ชื่อไฟล์ฐานข้อมูล>  ตัวอย่างเช่น sqlite3 testdb.dbs
              โปรแกรม sqlite3 จะตรวจสอบหาไฟล์ testdb.dbs และเปิดไฟล์มาอ่าน ซึ่งถ้าไม่พบไฟล์ที่ระบุ ระบบทำการสร้างฐานข้อมูลเปล่าและสร้างไฟล์ที่ระบุให้
              หมายเหตุ ถ้ารันโปรแกรม sqlite โดยไม่ระบุฐานข้อมูล โปรแกรมกำหนดให้สร้างฐานข้อมูลบนหน่วยความจำเครื่องทันที สามารถใช้คำสั่ง .save <ชื่อไฟล์> เพื่อบันทึกฐานข้อมูลในหน่วยความจำ

คำสั่งระบบที่ใช้บ่อย

                .open <ชื่อไฟล์ฐานข้อมูล> คำสั่งเปิดฐานข้อมูลที่ระบุ พร้อมปิดฐานข้อมูลก่อนหน้า
                .database คำสั่งแสดงรายชื่อฐานข้อมูลทั้งหมดในไฟล์ จะมี สองค่าเริ่มต้น คือ main เป็นชื่อที่กำหนดขึ้นถ้าไม่ระบุชื่อฐานข้อมูล และ temp ฐานข้อมูลทำงานขณะรันคำสั่ง sql

                .dbinfo <ชื่อฐานข้อมูล> คำสั่งแสดงรายละเอียดฐานข้อมูล ถ้าไม่ระบุชื่อระบบแสดงรายละเอียดฐานข้อมูล main
              .backup <ชื่อฐานข้อมูล>  <ชื่อไฟล์> สำรองข้อมูลของฐานข้อมูล ลงในไฟล์ที่กำหนด ถ้าไม่ระบุจะเหมือนคำสั่ง .clone ที่จะสำรองข้อมูลของฐานข้อมูล main
             .clone <ชื่อไฟล์> สำรองข้อมูล main ลงในไฟล์ที่กำหนด

 .table หรือ .tables แสดงรายชื่อตารางในฐานข้อมูลทั้งหมด
.schema <ชื่อตาราง>  คำสั่งแสดงรายละเอียดตาราง โดยระบุเป็นคำสั่งsql  create table
                                ถ้าไม่ระบุชื่อตารางระบบทำการแสดงรายละเอียดตารางทั้งหมดในฐานข้อมูลที่กำลังใช้งานอยู่
                .indexes <ชื่อดัชนี>  คำสั่งแสดงรายละเอียดของดัชนี (อินเด็กซ์ ) ที่ระบุ หรือแสดงรายชื่อดัชนีในกรณีไม่ระบุชื่อ
                .trace <ชื่อไฟล์คำสั่งเริ่มต้นบันทึกคำสั่งต่างๆ ที่เรียกใช้ ในรูปแบบภาษา sql และเขียนไฟล์เมื่อใช้คำสั่ง .trace off  หมายเหตุ ถ้ามีไฟล์เดิมอยู่ระบบทำการเขียนทับไฟล์เดิมทันที
                .output <ชื่อไฟล์> คำสั่งเริ่มต้นบันทึกการแสดผลลงในเท็กซ์ไฟล์ที่ระบุ และเขียนไฟล์เมื่อใช้คำสั่ง .output ซึ่งระบบจะทำการแสดงผลทางหน้าจอ หมายเหตุ ถ้ามีไฟล์เดิมอยู่ระบบทำการเขียนทับไฟล์เดิมทันที
                .save <ชื่อไฟล์> คำสั่งบันทึกข้อมูลจากหน่วยความจำลงในไฟล์ จากที่รันโปรแกรมโดยไม่ระบุฐานข้อมูล