Monday, April 9, 2018

Bitcoin and Blockchain (Week 11)


What is BitCoin ?
Bitcoin อ่านว่าบิทคอยน์ คือสกุลเงินในรูปแบบของดิจิทัล ถูกสร้างขึ้นมาด้วยภาษาคอมพิวเตอร์ ไม่มีใครเป็นเจ้าของ Bitcoin ไม่มีรูปร่างและไม่สามารถจับต้องได้เหมือนธนบัตรหรือเหรียญเงินบาท Bitcoin ถูกสร้างขึ้นมาด้วยกลุ่มนักพัฒนาเล็กๆกลุ่มหนึ่งตลอดจนบริษัทใหญ่ๆทั่วโลก โดยระบบของ Bitcoin ถูกรันโดยคอมพิวเตอร์ของผู้ใช้งานทั่วโลก โดยใช้ระบบซอฟต์แวร์ในการถอดสมการคณิตศาสตร์


Why they choose BitCoin ?
บิทคอยน์เกิดจากแนวคิดที่ว่ามีคนต้องการระบบเงินใหม่ที่ไม่ถูกตรวจสอบขึ้นมา จากเดิมที่มีระบบธนาคารกลางเป็นผู้ดูแล และมีหน้าที่กำหนดมาตรฐาน รวมถึงมูลค่าของเงิน ทำให้ธุรกรรมทางการเงินทุกอย่างที่เกิดขึ้นอยู่ในสายตาของธนาคารกลางนั้นเอง แต่กระบวนการเหล่านี้อาจจะไม่ค่อยถูกใจบรรดาธุรกิจใต้ดิน เพราะต้องระบุตัวตน เวลาโอนเงินก็ต้องผ่านตัวกลาง ทำให้ถูกตรวจสอบได้ง่าย


How does BitCoin work ?มีโปรแกรมเมอร์ชาวญี่ปุ่นคนหนึ่งที่ใช้นามแฝงว่า ซาโตชิ นากาโมโต้ ได้สร้างระบบที่เรียกว่า “Blockchain” ออกมา ซึ่งเป็นระบบเพื่อป้องกันการเกิดภาวะเงินเฟ้อและเสื่อมค่าลงอย่างรวดเร็วของสกุลเงินดิจิทัล จากการปั๊มเงินออกมาเรื่อย ๆ ได้ตามใจชอบ โดยนำระบบการทำงานของอัลกอริทึมมาใช้ แล้วกำหนดปริมาณเงินในระบบไว้ไม่ให้เกิน 21 ล้านหน่วย ทำให้บิทคอยน์เริ่มเป็นที่นิยมมากขึ้น เนื่องจากมีระบบป้องกันเงินเฟ้อนั่นเอง


What is blockchain ?
Blockchain คือเทคโนโลยีอัจฉริยะ ที่บันทึกข้อมูลในรูปแบบของ Block และแต่ละ Block จะบรรจุไว้ด้วยข้อมูลในรูปของ Hash (สมการทางคณิตศาสตร์ชนิดหนึ่ง หรือการเข้ารหัสนั่นเอง) ที่ต้องใช้กำลังการประมวลผลของชิปคอมพิวเตอร์ในการแก้สมการ เพื่อทำให้เกิดธุรกรรมขึ้น


Why you choose Blockchain ?
เป็นระบบกระจายการเก็บข้อมูลไปหลายๆ คนที่อยู่ในระบบเดียวกัน ทุกคนในระบบ จะมีข้อมูลชนิดเดียวกัน และ ตรวจสอบกันเองเสมอ ปลอมแปลงได้ยาก ทำให้สะดวก, รวดเร็ว,ปลอดภัย, ลดการใช้ทรัพยากร


How does blockchain work ?
จุดเด่นของ Blockchain นั้น คือ ข้อมูลธุรกรรมจะไม่ขึ้นอยู่กับใครคนใดคนหนึ่ง แต่อาศัยการยืนยันความถูกต้องจากทุกคน แต่หากต้องกระทำธุรกรรมการเงินจะต้องใช้ Private Key ที่อยู่กับเจ้าของและ Public Key ที่อยู่กับคนอื่นในการถอดรหัส


ปัญหาที่พบ
 อธิบายการทำงานของ  Blockchain ผิด เพราะไม่เข้าใจการทำงานของมัน วิธีแก้นั้น คือ ลองถามเพื่อนที่เข้าใจดู อาจช่วยเราได้

Tuesday, March 27, 2018

แปล Basics of Functional Dependencies and Normalization for Relational Databases (Week 11)

แนวทางที่ 1

  • ออกแบบ Relation schema ที่ง่ายต่อการเข้าใจ่
  • อย่ารวม attribute จาก multiple entity และ relationship type มากับ single relation
  • จากภาพเป็นส่วนของ Employee ที่เพิ่ม Dname, Dmgr_ssn (เกิดจากการผสมของ distinct real-world entities ของ employees กับ department)



  • มีข้อมูลที่ซ้ำกันใน EMP_DEPT ซึ่งส่งผลทำให้พื้นที่ในการจัดเก็บข้อมูล ซึ่งแก้โดยการ Update anomalies (EMPLOYEE x DEPARTMENT)

ชนิดของการ Update anomalies มี
  • Insertion
  • Deletion
  • Modification
Insertion Anomalies
  • เมื่อเพิ่ม tuple ใหม่ลงไปใน employee ที่ทำงานใน department มี Dnumber คือ 5 แล้ว attitbute value of department ทั้งหมดที่เป็น 5 เป็น consistent
Deletion Anomalies
  • ถ้าลบ employee ที่อยู่ตัวสุดท้ายแล้ว ข้อมูลที่อยู่ department เดียวกันก็จะถูกลบด้วย เช่น หากลบ Borg แล้วจะลบ Headquarters ด้วย
Modification Anomalies
  • หากเปลี่ยน manager ของ department 5 เราต้อง update ค่าใน tuple ของ employee ทั้งหมดที่ทำงานใน department นี้ แล้ว Database จะเปลี่ยนเป็น inconsistent
แนวทางที่ 2
  • ออกแบบ base relation schema ที่ไม่มีการ update anomalies
  • ถ้ามี anomalies (เพื่อเพิ่มประสิทธิภาพในการ query) ให้สังเกตและตรวจสอบให้แน่ใจว่าโปรแกรมนั้นมีการ Update ที่ถูกต้องหรือไม่
แนวทางที่ 3
  • หลีกเลี่ยงการวาง Attribute ที่อยู่ใน base relation ซึ่งมีค่าส่วนใหญ่เป็น NULL
  • หากหลีกเลี่ยงเกิด NULL ไม่ได้ ให้ Make sure ว่าใช้ในกรณีพิเศษเท่านั้น ไม่ใช้กับ tuple หลัก
  • เช่น ถ้า 15% ของ employee เป็น individual offices => ให้ทำการสร้าง attribute ชื่อ Office_number ใน EMPLOYEE relation
แนวทางที่ 4
  • การออกแบบ relation schema นั้นเราสามารถ join เงื่อนไขบน attribute ได้ตามความเหมาะสม (primary key, foreign key) ซึ่งการันตีได้ว่าไม่มี tuple นอกเงื่อนไขโผล่ขึ้นมา เพราะหากมีการหลีกเลี่ยง relation ที่มีการจับคู่ attribute ต่างๆ (foreign key, primary key) อาจทำให้เกิดการสร้าง Tuple นอกเงื่อนไขขึ้นมาได้ 

Monday, March 26, 2018

Code ในการทดสอบ DBMS (Week 8)


โค้ดที่ทดสอบ DBMS ใน Github

ทดสอบประสิทธิภาพของ DBMS กัน (Week8)

ในการทดสอบ DBMS นั้นเราได้ทำการทดสอบบนเครื่องคอมพิวเตอร์หนึ่งเครื่องแล้วใช่ข้อมูลไปจำนวน 10 ล้านแถว แล้วทดสอบ DBMS หลายตัว ซึ่งคอมพิวเตอร์ที่ใช้มีสเปค ดังนี้
  • Intel Core i7-6700HQ (2.60 - 3.50 GHz) 
  • NVIDIA GeForce GTX 950M (4GB GDDR5)
  • 8 GB DDR4
  • 1 TB 7200 RPM
  • ใช้ Virtual Machine : RAM 2 GB, CPU 2 Processor
ซึ่งค่าที่เราจะนำเปรียบเทียบนั้นมี
  • ความเร็ว
  • ขนาดของ DBMS
ผลที่ได้เป็น ดังนี้

ตารางผลการทดสอบ

กราฟผลการทดสอบ
สรุปผล

  • SQLite มีความเร็วในการ insert ข้อมูลเร็วที่สุด และกินพื้นที่น้อยที่สุด
  • MySQL มีความเร็วในการ insert ข้อมูลช้าที่สุด และกินพื้นที่มากที่สุด
ปัญหาที่พบ
  • เนื่องจากลองทดสอบ DBMS ในเครื่องหลักแล้ว ส่งผลทำให้โปรแกรมอื่นๆ ทำงานช้าลง เลยย้ายไปทดสอบใน Virtual Machine แทน
ลิ้งก์ที่เกี่ยวข้อง

Tuesday, March 6, 2018

ลองแปลง ER Diagram เป็น Relational Mapp (Week 7)

จากที่อาจารย์ให้ลองแปลง ER Diagram เป็น Relational Mapping
ข้อแรก เป็นการนำ ER Diagram จากสัปดาห์ที่ 6 มาแปลงเป็น Relational Mapping


Step 1 Mapping of Regular Entity Types
ส่วน Purchase Order

ส่วน Customer

ส่วน Line Item

Step 2 Mapping of Weak Entity Types : เนื่องจากไม่มี Weak Entity เลยไม่ต้องทำในส่วนนี้
Step 3 Mapping of Binary 1:1 Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ 1:1 เลยไม่ต้องทำในส่วนนี้
Step 4: Mapping of Binary 1:N Relationship Types
เพิ่ม cus_num ใน Purchase Order

เพิ่ม po_numใน Line Item

เพิ่ม si_numใน Line Item

Step 5: Mapping of Binary M:N Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ M:N เลยไม่ต้องทำในส่วนนี้
Step 6: Mapping of Multivalued Attributes
สร้างตารางของ Phone แยกออกมาเชื่อมกับ Customer
Step 7 : Mapping of N-ary Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ N-ary เลยไม่ต้องทำ

จนสุดท้ายได้ Relational Mapping ตามนีี้
Relational Mapping ของข้อหนึ่ง


ข้อสอง เป็นการหาโจทย์มาทำ ER Diagram และทำ Relational Mapping
โดยนำโจทย์มาจากหนังสือ Fundamentals of Database Systems ใน Exercise ข้อ 7.22

โจทย์ 
A database is being constructed to keep track of the teams and games of a sports league. A team has a number of players, not all of whom participate in each game. It is desired to keep track of the players participating in each game for each team, the positions they played in that game, and the result of the game. Design an ER schema diagram for this application, stating any assumptions you make. Choose your favorite sport (e.g., soccer, baseball, football).

แปลไทย
จงสร้าง ER Diagram ที่เกี่ยวกับทีมและการแข่งขันในลีก
  • เก็บข้อมูลเกี่ยวกับทีม
  • เก็บข้อมูลของนักกีฬาที่มีส่วนร่วมในการแข่งขันของทีมนั้นๆ
  • เก็บตำแหน่งของผู้เล่นคนนั้น
  • เก็บผลการแข่งขัน
ER Diagram

จากนั้นทำ 7 Step
Step 1 Mapping of Regular Entity Types
ส่วน team

ส่วน competition

ส่วน player

Step 2 Mapping of Weak Entity Types : เนื่องจากไม่มี Weak Entity เลยไม่ต้องทำในส่วนนี้
Step 3 Mapping of Binary 1:1 Relationship Types
เพิ่ม home_team, away_team ใน competition

Step 4: Mapping of Binary 1:N Relationship Types
เพิ่ม id_team ใน player

Step 5: Mapping of Binary M:N Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ M:N เลยไม่ต้องทำในส่วนนี้
Step 6: Mapping of Multivalued Attributes : เนื่องจากไม่มีMultivalued Attributes เลยไม่ต้องทำในส่วนนี้
Step 7 : Mapping of N-ary Relationship Types : เนื่องจากไม่มีความสัมพันธ์แบบ N-ary เลยไม่ต้องทำ

จนสุดท้ายได้ Relational Mapping ตามนีี้
Relation Mapping ข้อสอง

Tuesday, February 27, 2018

ทดลองใส่ข้อมูล 2 เท่าของแรมดูสิ (Week 6)

การ Query ข้อมูลลง Database จำนวนมากๆ
ในส่วนที่ผมทำ คือ ทดลองใส่ข้อมูลลง PostgreSQL ให้ได้ 2 เท่าของแรม ซึ่งผมใช้แรมจำนวน 8 GB นั้นคือ ต้องใส่ข้อมูลให้ได้ 16 GB
โดยเป้าหมายแรกที่ใส่ไปนั้น ต้องการให้ใส่ข้อมูลเป็นจำนวน 100M ตัว ซึ่งจะสุ่มข้อมูลเกรด รหัสวิชา ปีการศึกษา ภาคการเรียน และรหัสนักศึกษา แต่ผลลัพธ์ที่ได้ คือ เก็บได้ไปแค่ 2M ตัวเท่านั้น

ซึ่งในการเก็บข้อมูลเข้า Database จะใช้ภาษา Python ซึ่งทำได้ ดังนี้


ในการ query ข้อมูลเข้า Database นั้น จะ query ข้อมูลจากตารางย่อยก่อน นั้นคือ ปีการศึกษา, ภาคการเรียน เป็นต้น 



จากนั้นทำการสุ่มข้อมูลจากตารางย่อยแล้วเอาข้อมูลตารางหลัก จับเวลาแล้วบันทึกเวลาลงไฟล์ CSV

เมื่อหลังจากลงข้อมูลเสร็จ ก็จะทำการ SELECT ข้อมูล แต่แล้วปัญหาก็เกิดขึ้ินเมื่อ pgAdmin ไม่สามารถเข้าถึง Server ได้ เลยกะว่าจะลองแล้วลง PostgreSQL ใหม่แล้วค่อยมาทำต่อ

การคิดหัวข้อ Project
ในหัวข้อ Project นั้น เราได้ลองคิดว่าจะทำกัน 2 งาน ซึ่งมี
1. เก็บจำนวนค่าไฟ
2. ทำตารางการซ้อมและการแข่งขันนักกีฬา E-Sport 
ซึ่งเราได้ตกลงแล้วว่าจะทำหัวข้อ 2 ทำตารางการซ้อมและการแข่งขันนักกีฬา E-Sport ครับ

ปัญหาที่พบ
1. ยัง Query ข้อมูลไม่เสร็จ ซึ่งอาจจะ Query กันในภายหลัง
2. Query ข้อมูลช้า ซึ่งอาจปรับโค้ดให่ไม่ต้องเปิด-ปิด Database ตลอดเวลา
3. Query ข้อมูลใน PostgreSQL ไม่ได้เพราะเข้า Server ไม่ได้ ซึ่งอาจจะต้องลบแล้วลงใหม่
4. ขี้เกียจทำ Blog + ขี้เกียจทำงานให้ดี ซึ่งทำไม่รู้วิธีแก้ปัญหา จะทำยังไงดีครับ ???

ลิ้งก์ที่อ้างอิง



  • เกรด, รหัสวิชา, ปีการศึกษา, ภาคการเรียน, รหัสนักศึกษาหกหกหกหกหกหกหกหกหกฟหกฟหกืา่่ไก่ืไ่ืก่าืๆไ


Tuesday, February 20, 2018

ค้นหา ER Diagram (Week 5)

ในส่วนที่ผมได้ทำนั้นมี ดังนี้
ผมได้หา ER Diagram ของการยืมหนังสือ


ซึ่งข้อมูลในนี้ประกอบไปด้วย
Entity : Member, Book
Relation : Borrow
Attributes :
  • Member : MemberType, Member_NO, Name, Branch, Sex
  • Book : Book_Code, Title, BookType, ISBN, Author
  • Borrow : Date_Borrow, Date_Return
Database ช่วยอะไรได้บ้าง
ประเทศ : ทำให้ประเทศไทยสามารถนำข้อมูลที่จำเป็นมารวมกันจนเกิดมาเป็น Big Data ซึ่งสามารถนำข้อมูลส่วนนี้ไปวิเคราะห์ต่อได้

ตัวเรา : นำข้อมูลจากแหล่งเว็บต่างๆที่เก็บใน Database มาทำการบ้านได้
อื่นๆ : เราสามารถสร้างเกมที่เป็นแบบ Multiplayer ได้ โดยใช้ Realtime Database

ปัญหาที่เจอ
  • จะเริ่มสอบแล้ว แก้ปัญหาโดยการเริ่มอ่านหนังสือ
  • เพื่อนไม่ได้ทำ ER ใน Google Slide เพราะเข้าผิด แก้ปัญหาโดยการให้เพื่อนทำใน Google Slide

SQL injection (Week 16)

SQL Injection ในบางครั้งนักพัฒนาใช้ method ‘+’ (concat) กับ String ที่เป็นคำสั่ง SQL เพื่อ query ข้อมูลที่ user ต้องการ ซึ่งทำให้เกิดช่...