วันอาทิตย์ที่ 7 กุมภาพันธ์ พ.ศ. 2559

Assignment of W3

MySQL constraints


(what you have done)
ข้อบังคับของการใช้งาน MySql ได้แก่

1.PRIMARY KEY and UNIQUE Index Constraints

เนื่องจากการใช้คำสั่งเพื่อเปลี่ยน data อย่างเช่น INSERT หรือ UPDATE กับ data ที่เป็น primary-key, unique-key, หรือ foreign-key constraints อาจทำให้เกิด error ได้
ดังนั้น MySQL จึงมี IGNORE keywords ไว้ให้กับ key นั้น เมื่อเราเรียกใช้ INSERT หรือ UPDATE มันจะข้ามไปยัง row ต่อไปทันที 
ตัวอย่าง

ตารางของเรามีข้อมูลดังนี้

CREATE TABLE `file_names` (
`id` int(11) NOT NULL auto_increment,
`file_name` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `file_name` (`file_name`(200))
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

นี่คือ คำสั่งของเรา

INSERT IGNORE INTO `its_streamingdata`.`file_names` (`id` ,
`file_name`) VALUES (NULL , 'a'), (NULL , 'a')

ตารางของเราก็จะมี 1 แถว ที่มี filename ของ a

2.FOREIGN KEY Constraints

เราสามารถดึงข้อมูลแบบข้าม relate data จากตาราง อื่นๆได้เลย และยังทำให้ข้อมูลที่ดึงมานั้นมีความต่อเนื่อง
ตัวอย่าง

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME 
     > FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
     > WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
+--------------+---------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME    | COLUMN_NAME | CONSTRAINT_NAME |
+--------------+---------------+-------------+-----------------+
| fk1          | myuser        | myuser_id   | f               |
| fk1          | product_order | customer_id | f2              |
| fk1          | product_order | product_id  | f1              |
+--------------+---------------+-------------+-----------------+
จะเห็นได้ว่า ข้อมูลที่เรา SELECT นั้นมาจากต่าง table กัน

3.Constraints on Invalid Data

วิธีการจัดการกับ Invalid Data ของ MySQL มีดังต่อนี้

- ถ้าเราพยายามใส่ค่าลงใน คอมลั่มจำนวน ที่เกินตาราง Mysql จะแทนที่ด้วยค่า 0 

- สำหรับ ข้อมูลชนิด string MySQL สามารถเก็บเป็น string ว่างๆ หรือ string ที่ยาวที่สุดเท่าที่จะเก็บในคอลั่มได้ 

- ถ้าพยายามจะเก็บ string ที่ไม่ได้ขึ้นต้นด้วยตัวเลข ลงใน คอลั่มจำนวน MySQL จะเก็บค่า 0 แทน

- Invalid ของ ENUM หรือ SET จะถูกจัดการตาม ENUM and SET Constraints

- MySQL ให้เก็บ data ที่อาจมีค่าไม่ถูกต้องลงในคอลั่ม DATE และ DATETIME ได้ เช่น '2000-02-31' กับ '2000-02-00 ขึ้นอยู่กับ Application ว่าจะให้ใช้ strict SQL mode หรือเปล่า

- ถ้าพยายามที่จะเก็บ NULL ในคอลั่มที่ไม่รับค่า NULL errror จะเกิดสำหรับคำสั่ง INSERT แบบแถวเดียว แต่สำหรับคำสั่ง INSERT แบบหลายๆแถว หรือคำสั่งอื่นๆ MySQL จะเก็บ implicit default value
สำหรับชนิดของข้อมูลในคอลั่มนั้น เช่น 0 สำหรับข้อมูลจำนวน '' สำหรับข้อมูลชนิด string

- ถ้าคำสั่ง INSERT ไม่ได้ระบุค่าใส่ลงในคอลั่ม MySQL จะใส่ค่า default ถ้า คอลั่มได้ระบุคำนิยาม รวมถึง explicit DEFAULT clause เอาไว้ แต่ถ้าไม่ได้ระบุ จะใส่ค่า DEFAULT ของ data type ในคอลั่มนั้นๆ

4.ENUM and SET Constraints

ENUM และ SET มีวิธีจัดการคอลั่มที่สามารถเก็บได้แค่ค่า set เท่านั้น

- ค่า ENUM ต้องอยู่ในรายชื่อที่ระบุไว้ตอนสร้างคอลั่ม ค่านั้นไม่สามารถเป็น ค่า error ได้ เช่น 0 หรือ string ว่างๆ เช่น สำหรับคอลั่มที่ตั้งเอาไว้ให้รับข้อมูล ENUM ('a','b','c') ข้อมูลอย่าง 'd' หรือ 'ax' ที่เขามา จะถูก reject ออกไป 

- ค่า SET ต้องเป็น string ว่างๆ หรือ มีค่าที่ระบุตามที่คอลั่มต้องการ แต่ละตัวคั่นด้วย , เช่น คอลั่มที่ระบุว่า SET('a','b','c') ค่าอย่าง  'd' หรือ 'a,b,c,d' จะถือว่า Invalid และถูก reject ออกไป

(any problem/solution)
ปัญหา
-
แก้ปัญหา
-

(decision)
- หาข้อมูลจากเว็ป official ของ MySQL

(related info/link/reference)
- http://dev.mysql.com/doc/refman/5.7/en/constraints.html

โปรแกรม MySQL

โปรแกรม MySQL

   MySQL (มายเอสคิวแอล) เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System) โดยใช้ภาษา SQL แม้ว่า MySQL เป็นซอฟต์แวร์โอเพนซอร์ส แต่แตกต่างจากซอฟต์แวร์โอเพนซอร์สทั่วไป โดยมีการพัฒนาภายใต้บริษัท MySQL AB ในประเทศสวีเดน โดยจัดการ MySQL ทั้งในแบบที่ให้ใช้ฟรี และแบบที่ใช้ในเชิงธุรกิจ
   นอกจากนี้ MySQL เป็นที่นิยมใช้กันมากสำหรับฐานข้อมูลสำหรับเว็บไซต์ เช่น มีเดียวิกิ และ phpBB และนิยมใช้งานร่วมกับภาษาโปรแกรม PHP ซึ่งมักจะได้ชื่อว่าเป็นคู่ จะเห็นได้จากคู่มือคอมพิวเตอร์ต่างๆ ที่จะสอนการใช้งาน MySQL และ PHP ควบคู่กันไป นอกจากนี้ หลายภาษาโปรแกรมที่สามารถทำงานร่วมกับฐานข้อมูล MySQL ซึ่งรวมถึง ภาษาซี ซีพลัสพลัส ปาสคาล ซีชาร์ป ภาษาจาวา ภาษาเพิร์ล พีเอชพี ไพทอน รูบี และภาษาอื่น ใช้งานผ่าน API สำหรับโปรแกรมที่ติดต่อผ่าน ODBC หรือ ส่วนเชื่อมต่อกับภาษาอื่น (database connector) เช่น เอเอสพี สามารถเรียกใช้ MySQL ผ่านทาง MyODBC,ADO,ADO.NET เป็นต้น

ท่านสามารถดาวน์โหลดโปรแกรมได้ ที่นี่

หน้าตา และส่วนต่างๆของโปรแกรม


กด File >> New Model




วันอาทิตย์ที่ 24 มกราคม พ.ศ. 2559

ภาษา SQL (เบื้องต้น)

ภาษา SQL

   SQL (Structured Query Language) คือ ภาษาที่ใช้ในการเข้าถึง และจัดการกับฐานข้อมูล ซึ่งภาษา SQL เองก็มีอยู่หลายเวอร์ชั่นด้วยกัน

RDBMS (Relational Database Management System) หมายถึง ระบบที่จัดการความสัมพันธ์ของข้อมูล เช่น ข้อมูลใน RDBMS ถูกเก็บในรูปแบบของตาราง ฉะนั้นตารางจะเป็นตัวบอกความสัมพันธ์ของข้อมูลจากแถว และหลัก

ฐานข้อมูลส่วนใหญ่จะถูกเก็บในรูปแบบของตาราง โดยจะระบุชนิดของตารางด้วยชื่อตาราง หลักหมายถึงชนิดของข้อมูล และแถวหมายถึงข้อมูลที่บันทึก

การเขียนภาษา SQL 
ภาษา SQL จะมีคำสั่งที่เรียบง่าย ชัดเจนโดยจะมีข้อบังคับในการเขียน ดังนี้

1. ตัวพิมใหญ่ หรือพิมเล็ก ไม่มีความแตกต่างกัน

2. เมื่อเขียนจบ 1 คำสั่ง (1 statement) จะต้องปิดด้วย ; (Semicolon)

ตัวอย่างการใช้งาน


ใช้คำสั่ง Select เรียกข้อมูลที่ชื่อว่า Customers จาก ฐานข้อมูลที่เรามี (ช่องขวามือสุด) ผลที่ได้คือ ข้อมูลของลูกค้าแต่ละคน


คราวนี้เรียกข้อมูลที่ชื่อว่า Orders ด้วยคำสั่ง Select เช่นเคย แต่พิมพ์ด้วยตัวพิมพ์เล็กทั้งหมด ผลที่ได้คือ ข้อมูลการสั่งซื้อแต่ละครั้ง

คำสั่งที่นิยมใช้
Select - ดึงข้อมูลจากฐานข้อมูล
Update - อัพเดตฐานข้อมูล
Delete - ลบข้อมูลออกไปจากฐานข้อมูล
Insert Into - ใส่ข้อมูลใหม่ลงในฐานข้อมูล
Create Database - สร้างฐานข้อมูลใหม่
Alter Database - ปรับปรุงฐานข้อมูล
Create Table - สร้างตารางใหม่
Alter Table - ปรับปรุงตาราง
Drop Table - ลบตาราง
Create Index - สร้าง index (ตัวค้นหา)
Drop Index - ลบ index

วันเสาร์ที่ 23 มกราคม พ.ศ. 2559

ปัญหาการเรียกใช้ฟังก์ชั่นในไฟล์ .kv

การเขียนโปรแกรมด้วยภาษา Kivy
ปัญหาการเรียกใช้ฟังก์ชั่นในไฟล์ .kv

   ในการเขียนโปรแกรมด้วยภาษา kivy นั้น จะทำงานร่วมกับภาษา python โดยจะแบ่งหน้าที่กันเป็นสองส่วน เปรียบได้ว่า python จะเป็นตัวกำหนดการทำงาน ส่วน kivy จะระบุส่วนประกอบของหน้าโปรแกรม และ GUI (Graphic User Interface)

   GUI (Graphic User Interface) คือ ส่วนที่ทำงานติดต่อกับผู้ใช้ อ่านการกระทำ และไปใช้ในการประมวลผลต่างๆ เช่น เราออกแบบ Button เอาไว้ เมื่อมีการกดที่ปุ่มนี้ จะให้แสดงคำว่า "Hello" 

   วิธีการเขียนคำสั่งแบบนั้น ใน kivy จะเขียนได้ดังนี้

ใน python file

def Hello():
   text = "Hello"
   return text

ใน kivy file

Button:
   on_press: root.hello()

   ที่ขีดเส้นใต้เอาไว้ คือ ฟังก์ฃั่นที่ถูกสร้างอยู่ใน python file โดยฟังก์ชั่นนี้ไม่มีการรับพารามิเตอร์ 
   แต่ถ้าฟังก์ชั่นนั้นมีพารามิเตอร์เราสามารถใส่พารามิเตอร์ ในการเรียกใช้ได้เลย ตัวอย่างเช่น

ใน python file

def hello(name):
   text = "Hello "+name
   return text

ใน kivy file

Button:
   on_press: root.hello("Somruk")

   แต่ถ้าพารามิเตอร์ที่เราจะเรียกใช้เป็น attribute ที่มีอยู่แล้ว และไปเรียกใช้ฟังก์ชั่นใน kivy ซึ่ง kivy ไม่ได้รู้จัก attribute นั้น จะทำให้ผลลัพท์ที่ได้ผิดพลาดไป ยกตัวอย่างจากผลงานของผู้เขียน

   โปรแกรมรับข้อมูลชื่อจาก textinput และไปเพิ่ม ชื่อใน List



จากรูป ที่ตรงกลาง มีการเรียกใช้ฟังก์ชั่น addStudent และ พารามิเตอร์เป็น attribute ใน python ผลที่ได้คือ


 
   วิธีการแก้ คือ ให้เราเรียกใช้ ฟังก์ชั่นนี้ ใน python ไฟล์ เพื่อให้ฟังก์ฃั่นนั้น รู้ัจัก attribute



   ในที่นี้ได้เรียกผ่านฟังก์ชั่นที่ชื่อว่า OpenFile
   ผลที่ได้
   

   จะเห็นว่าผลลัพท์สอดคล้องกับข้อมูลที่ใส่เข้าไป

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

Chapter 5 : Invaders Revenge – An Interactive Multitouch Game

ในบทนี้เราจะรวมเอาส่วนประกอบต่างๆ และเทคนิคที่เรียนมาเพื่อสร้าง อนิเมชั่น และไดนามิก แอปพลิเคชั่น ส่วนใหญ่เน้นไปทางการสร้างเกมส์ มีส่วนประกอบ มีการควบคุมอีเวนท์มากมายในเวลาเดียวกัน
โดยเกมส์ที่จะมาให้ศึกษาเป็นตัวอย่างชื่อว่าเกมส์ ผู้รุกรานจากอวกาศ (Space Invaders) ข้างล่างนี่คือ ส่วนประดอบหลักๆที่เราจะทำ :

• Atlas: แพ็คเกจ Kivy ที่ใช้ในการโหลดภาพมาใช้
• Sound: คลาสที่คุมเรื่องเสียง
• Animations: Transitions, time control, events, และการทำงานของ widgets ต่างๆ
• Clock: ควบคุมการเกิด event
• Multitouch: ควบคุมแอคชั่นที่แตกต่างกัน จากการสัมผัส
• Keyboard: จับอีเวนท์ที่เกิดจากคีย์บอด

Invaders Revenge – an animated multitouch game 


รูปภาพนี้แสดงให้เราเห็นส่วนต่างๆของโปรเจค ทำให้เราแยกเป็นโครงสร้างของเกมส์ออกได้ ก็จะมีตัว Shooter (ผู้เล่น) ยิง shot เพื่อไปทำลาย invader ซึ่งตัว invader ก็ยิง missile เพื่อทำลายผู้เล่นเหมือนกัน

วันอังคารที่ 22 กันยายน พ.ศ. 2558

Chapter 4 : Improving the User Experience

ใน chapter นี้จะอธิบายในส่วนที่ Kivy มีไว้ช่วยให้นักโปรแกรมเมอร์ สามารถพัฒนา User Experince ซึ่งจะเกี่ยวข้องกับ widget ที่เฉพาะเจาะจง

สรุปสิ่งที่เราจะได้เรียนรู้ ;

- สับเปลี่ยนไปมาระหว่าง screens ที่แตกต่างกัน
- การใช้ pre-build complex widgets เพื่อที่จะเลือกสี
- การควบคุม พื้นที่ของ Canvas
- หมุน และขยายด้วย  multi-touch gestures 
- สร้าง single gestures เพื่อวาด screen

Screen manager – selecting colors for the figures

ScreenManager class คือส่วนที่ให้เราจัดการกับ screen ต่างๆ ใน window เดียวกันได้ ซึ่งในส่วนนี้ User จะเป็นคนเพิ่มสีเองได้ Kivy เตรียม widget ที่ชื่อว่า ColorPicker ดังรูปต่อไปนี้


ปัญหาที่เราพบคือ widget นี้กินพื้นที่มาก จึงไม่เหมาะกับ interface ของเราเลย เราจึงจะใช้ ScreenManager ในการแก้ปัญหานี้ ให้เราสร้างไฟล์ kivy ขึ้นมา ชื่อว่า comicscreenmanager มีโค้ดดังนี้


ในบรรทัดที่ 5 มีการเรียกใช้ ColorPicker 
และเราก็ต้องมีไฟล์ kivy อีกไฟล์ชื่อว่า comiccreator มีโค้ดดังนี้


นอกจากนี้เราต้องไปแก้โค้ดใน Chapter 3, Widget Events – Binding Actions ในส่วนที่เราจะระบุ ColorPicker Screen ด้วยชื่อ colorscreen เพื่อเริ่มการใช้ ColorPicker ให้แก้โค้ดตรงที่  method of generaloptions.py

ทีนี้เราก็ปุ่ม Color เพื่อสลับ Screen ให้แสดง ColorPicker

ComicScreenManager ได้กลายมาเป็น Widget หลัก ของ comic creator project ดังนั้น ไฟล์ comicreator.py  ควรจะเปลี่ยนตามนี้

เมื่อเปลี่ยนเสร็จแล้ว เราสามารถสลับไปมา 2  screens ระหว่าง ColorPicker และ ComicCreator

Color Control on the canvas – coloring figures 

เมื่อซักครู่เราได้เรียนวิธีการเลือกสีไปแล้ว ต่อมาเราจะใช้สีที่เลือกใส่ให้กับ elements ใน widget นั้นๆ
ศึกษาจากตัวอย่างต่อไปนี้


ใน Label จะมี properties หนึ่งชื่อว่า color เราเปลี่ยน color ตรงนี้ให้เป็นสีแดง ดูผลลัพท์


ใน Label เราเรียก color ให้เป็นสีแดง Line จึงเป็นสีแดง แต่มันกลับใส่สีแดงให้กับ  Line ใน widget ด้วย
สามารถแก้ปัญหาด้วย 3 เมธอดนี้ ในไฟล์ toolbox.py

• Method draw in ToolStickman:

• Method draw (class ToolFigure): 

• Method widgetize (class ToolFigure): 

จะเห็นว่าทั้งสามเมธอดมีโค้ดส่วนที่ไปดึง ค่า ColorPicker ไปใส่เป็น Color instruction ให้กับ canvas




วันจันทร์ที่ 21 กันยายน พ.ศ. 2558

Chapther 1 : GUI Basics - Building an Interface (Embedded Layout)

จากในตอนเริ่ม Chapter เราได้เรียนการสร้าง widget แล้วเราเอามารวมๆกันจึงเรียกว่า Embedded widget จากนั้นเราได้เรียน Layout มันก็มี Embedded Layout เช่นกัน

ด้านล่างคือ ตัวอย่าง Code Python พื้นฐานที่ใช้อธิบาย embedded Layout ได้ :


ผลลัพท์ที่จะได้



เราจะทำการพัฒนา MyGridLayout class โดยจะรวมเรา Layout ทั้งหมดของ kivy มา embedded ใน GridLayout โดยกำหนดให้มี 2 แถว 3 หลัก 
ในการจะศึกษาเราจะแบ่ง code ภาษา Kivy ออกเป็น 5 ส่วน อย่าเพิ่งตกใจ มันเป็นโค้ดที่ไม่ซับซ้อน

code ด้านล่างนี้คือ fragment 1 :





Chapther 1 : GUI Basics - Building an Interface (Layouts)

Layout คือ คลาสย่อยของ Widget ที่กำหนดรูปแบบต่างๆ ของ Embedded widget
ยกตัวอย่างง่ายๆ เช่น FloatLayout เป็นการจัดการกับ widget ที่เรามีการใช้ proportional coordinates  ซึ่งมันจะดีกว่า การใช้เป็น fixed coordinates (exact pixels) จึงช่วยลดภาระการคำนวนต่างๆลงไปได้

ทดลองโค้ดดังนี้ :

floatlayer.py


floatlayer.kv


ผลที่ได้



ใน Layout เองก็มี properties เฉพาะที่ใช้ในตัวมัน เช่น size_hint และ pos_hint และมี key ต่างๆมากมายเช่น x หรือ top , y หรือ right ซึ่ง positioning และ sizing properties มีให้ศึกษาได้จากตารางดังต่อนี้ 


สิ่งหนึ่งที่ต้องระวังก็คือ แต่ละ properties นั้นจะทำงานแตกต่างกันตาม Layout นั้นๆ 
ในปัจจุบัน Kivy นั้นมีทั้งหมด 7 Layout จะอธิบายแต่ละ Layout คร่าวๆดังนี้

FloatLayout
   จัดการ widget ที่มี พิกัด(เช่น size_hint และ pos_hint) เป็นแบบสัดส่วน ค่าจะมีตั้งแต่ 0-1 จากสัดส่วนของ window size 

RelativeLayout    
   ทำงานคล้ายๆ FloatLayout แต่ในเรื่องของ positioning properties (เช่น pos, x, center_x, right) จะสัมพันธ์กับ Layout size ไม่ใช่ window size

GridLayout
   จัดการ widget ใน Grid ต้องระบุอย่างน้อย 2 properties นั่นคือ cols (หลัก) และ rows (แถว)

BoxLayout
   จัดการ widget ในแถวหนึ่ง หรือหลักหนึ่ง ขึ้นอยู่กับค่า property orientation ว่าเป็น horizontal หรือ vertical

StackLayout
   คล้ายๆ BoxLayout แต่มันจะข้ามไปทำงานในแถว และหลักต่อไปทันที เมื่อไม่มีที่ว่างเหลือแล้ว ซึ่งทำให้ Layout นี้มีความซับซ้อนมากกว่า

AnchorLayout
   จัดการกับ widget ที่รอบๆ หรือ ตรงกลาง anchor_x property หมายถึง x position (ซ้าย กลาง หรือ ขวา)  anchor_y หมายถึง  y position (บน กลาง หรือล่าง)

ScatterLayout
   ทำงานคล้าย RelativeLayout แต่มันสามารถทำ multitouch gesturing เพื่อใช้การ rotating, scaling
หรือ translating

วันพุธที่ 16 กันยายน พ.ศ. 2558

Chapther 1 : GUI Basics - Building an Interface (Basic widgets - labels and buttons)

Widget คือ ส่วนที่เป็น GUI เช่น Button ,Label หรือ Checkbox ซึ่งเป็นสิ่งที่มีอยู่ใน Kivy อยู่แล้ว สามารถศึกษาเพิ่มเติมได้ที่ http://kivy.org/docs/api-kivy.html ยกตัวอย่างโค้ดที่มีการใช้ widget

โค้ดในส่วนของ .py มีดังนี้ (ตั้งชื่อว่า widgets)



จะเห็นว่าเราใช่การสืบทอด class (สร้างคลาสลูก) ดีกว่าไปเปลี่ยนแปลงข้อมูลที่คลาสแม่
จากนั้นให้

โค้ดในส่วนของ .kv มีดังนี้ (ตั้งชื่อว่า widgets)



ผลการรันโค้ด


จะเห็นว่าในโค้ดมีอยู่ 2 object และเราก็มีการตั้งค่า properties ให้กับแต่ละ object (สำหรับ color มีฟอร์มการใส่คึอ RGBA : Red ,Green ,Blue และ alpha/transparency)

ใน Button มี properties บางอันที่เหมือนกันอยู่เราจึงจะสร้างต้นแบบของ Button ขึ้นมา เพื่อจะได้ประหยัดการเขียนโค้ดซ้ำๆ ดังนี้



ผลการรันโค้ด







Chapther 1 : GUI Basics - Building an Interface (Hello World!)

เราจะทดลองสร้างโปรแกรม hello world ด้วยโค้ดที่เตรียมมาให้ (ใช้ Python IDE ในการเขียนโค้ดส่วน .py)



ผลลัพท์ที่ได้


จะพบว่าโปรแกรมใช้สองคลาส นั่นคือ App และ Label ซึ่งเราใช้เป็น inheritance คลาส App เป็นคลาสแม่ของ HelloApp ส่วนในคลาสก็มี เมธอด build(self) เป็นเมธอดที่รีเทิร์น window content
ต่อไปเราจะแยกเป็นสองส่วน เพราะภาษา Kivy ต้องการแยกลอจิก ออกจากการแสดงผล ฉะนั้นเราจะแยกเป็นสองไฟล์

ไฟล์แรก hello2.py เขียนด้วย Python IDE


ไฟล์ที่สอง hello2.kv เขียนด้วย notepad แล้วใส่นามสกุลไฟล์เป็น .kv


ผลลัพท์ที่ได้ 


*จะทำงานได้ กุญแจสำคัญอยู่ที่ชื่อ subclass ของ คลาส App นั่นคือ HelloApp เพราะชื่อ subclass จะเกี่ยวข้องกับชื่อไฟล์ Kivy ยกตัวอย่างเช่น ชื่อ class FooApp(App) ไฟล์ Kivy ก็จะชื่อ foo.kv และที่สำคัญ สองไฟล์นี้ต้องอยู่ directory เดียวกัน

จะเห็นว่าการแยกโค้ดนั้นทำให้มันดูง่าย และเป็นระเบียบ



วันอังคารที่ 15 กันยายน พ.ศ. 2558

Kivy และการติิดตั้ง

Kivy คือ library ชนิดหนึ่งในภาษา Python ที่ใช่ในการพัฒนาแอพพลิเคชั่น ตัวภาษา Kivy นั้น จะช่วยแยกลอจิก ออกจากการแสดงผล ให้เราสามารถสร้าง User Interface ได้ ตัวอย่างเช่น multi-touch apps

- มีลักษณะ cross platform
- FREE ! สามารถใช้พัฒนาโปรแกรม และใช้ในธุรกิจได้แบบไม่ต้องเสียค่าลิขสิทธิ์
- ออกแบบกราฟฟิกด้วย OpenGL ES 2 ทำให้มีความรวดเร็ว และทันสมัย
- มีอุปกรณ์ให้เลือกใช้มากกว่า 20 widgets จึงออกแบบงานได้หลากหลาย และมีความยืดหยุ่น

   ใน blog นี้จะอ้างอิงข้อมูลที่ศึกษาจากหนังสือ Kivy : Interactive Application In Python

ข้อมูลเพิ่มเติมที่ http://kivy.org/#home

การติดตั้ง 

ใน Ubuntu http://kivy.org/docs/installation/installation-linux.html#installation-linux

ใน Window http://kivy.org/docs/installation/installation-windows.html

วันพุธที่ 2 กันยายน พ.ศ. 2558

โจทย์(ครั้งที่ 2)

1035 : Prime Palindrome
Problem type : Batch
Time limit : 1.0 second(s)
Memory limit : 64 megabyte(s)
จำนวนเต็มใดๆ จะถูกเรียกว่า Palindrome ก็ต่อเมื่อ ค่าที่ได้เมื่ออ่านจากหน้าไปหลังและหลังไปหน้า มีค่าเท่ากัน ยกตัวอย่างเช่น 79197 และ 324423 เป็น Palindrome ทั้งคู่ หน้าที่ของคุณคือ คุณจะได้รับจำนวนเต็ม N (1 <= N <= 1 000 000) จากนั้น คุณต้องหาจำนวนที่น้อยที่สุด M โดยที่ M >= N และ M ต้องมีสมบัติเป็นทั้งจำนวนเฉพาะ และ Palindrome

ข้อมูลนำเข้า
บรรทัดแรกเพียงบรรทัดเดียว ระบุจำนวนเต็ม N

ข้อมูลส่งออก

บรรทัดเดียว ระบุจำนวนเฉพาะที่มีค่าน้อยที่สุด แต่ต้องมีค่ามากกว่าหรือเท่ากับ N

ที่มา: Indian National Olympiad in Informatics Online Programming Contest 4-5 September 2004
ตัวอย่างข้อมูลนำเข้าตัวอย่างข้อมูลส่งออก
31101

ความช่วยเหลือ: ไม่มีคำใบ้สำหรับปัญหานี้


Troubleshoot
   เราจะเอาค่าที่มีค่ามากว่า input มาเช็ค 2 อย่าง นั่นคือ เป็นจำนวนเฉพาะ กับ Palindrome หรือไม่ ถ้าเป็นก็ให้ print ค่านั้นออกมาเลย ถ้าไม่ใช่ให้เพิ่มค่าทีละ +1 (ในโค้ดจะแบ่งเป็น function อย่างชัดเจน)

Code 



Test code



1093 : หยิบหนังสือ
Problem type : Batch
Time limit : 1.0 second(s)
Memory limit : 16 megabyte(s)
เนื่องจากคุณมาเข้าแถวสาย คุณจึงโดนทำโทษให้จัดหนังสือในห้องสมุด หนังสือแต่ละเล่มที่คุณจัดล้วนแต่เป็นหนังสือเรียนหนา ๆ น่าเบื่อ  ทันทีที่ถึงเวลาพักเที่ยงและอาจารย์ห้องสมุดของคุณไม่อยู่ คุณจึงคิดเกมหนึ่งขึ้นมาเล่นกับตัวเอง

เกมนี้คุณคิดเองเล่นเองคนเดียว เริ่มต้นจากมีหนังสืออยู่ n เล่มวางเรียงอยู่บนกองเดียวกันกองหนึ่ง หนังสือแต่ละเล่มถูกติดหมายเลขไว้บนสันปก ซึ่งเป็นจำนวนเต็มไม่ติดลบซึ่งมีค่าไม่เกิน 1,000,000

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

งานของคุณ
    จงเขียนโปรแกรมรับหมายเลขของหนังสือ n เล่มในกองจากบนลงล่าง แล้วให้ตอบผลรวมแต้มที่มากที่สุดที่ทำได้จากการหยิบหนังสือนี้

ข้อมูลนำเข้า

    บรรทัดที่ 1 มีจำนวนเต็มบวก N (1≤N≤2,000) แทนจำนวนหนังสือในกอง
    บรรทัดที่ 2 ถึงบรรทัดที่ N+1 จะบอกหมายเลขหนังสือในกอง จากบนลงล่าง บรรทัดละหนึ่งจำนวน ซึ่งจำนวนเต็มไม่ติดลบดังกล่าวมีค่าไม่เกิน 1,000,000

ข้อมูลส่งออก

    มีจำนวนเต็มจำนวนเดียวแต้มรวมที่มากที่สุดที่เป็นไปได้จากการหยิบหนังสือตามเงื่อนไข

โจทย์โดย: 
วรภัทร จรางกูล
ที่มา: 
ดัดแปลงจากข้อสอบพี่ช่วยน้อง โรงเรียนมหิดลวิทยานุสรณ์ พ.ศ. 2552
ตัวอย่างข้อมูลนำเข้าตัวอย่างข้อมูลส่งออก
7
1
2
3
4
5
6
7
5
9
5
5
5
5
5
5
5
5
100
10

Troubleshoot
   ในหนังสือกองหนึ่ง (ข้อมูล 1 ชุด) เราเลือกออกมาได้ ครั้งละ 3 เล่ม กี่ครั้งก็ได้ เหมือนกับเรื่องความน่าจะเป็น เราต้องหาว่าวิธีในการเลือกมีกี่วิธี และวิธีนั้นให้ผลลัพท์เท่าไหร่ และจึงเอาวิธีที่ให้ผลลัพท์มากที่สุดมาตอบ

Code



Test Code

วันจันทร์ที่ 31 สิงหาคม พ.ศ. 2558

ทดลองเขียน class Stack และ ตัวอย่าง

Class Stack



*อ้างอิงข้อมูลใน class จาก http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html
**เพิ่ม method show

ตัวอย่าง โปรแกรมพิสูจน์คู่วงเล็บ



Output



การสร้าง class ใน Python

Python ก็เป็นอีกภาษาหนึ่งที่เขียนโปรแกรมแบบ Object-Oriented ได้ แถมสามารถเขียนได้สั้น เพราะเป็นภาษา script

เริ่มต้นด้วยการสร้าง class

1. ตั้งชื่อ class
ตัวอย่าง



จะเห็นว่าใช้การย่อหน้าเพื่อแยก code ส่วนที่เป็น code ใน class 

2. ในส่วนของ constructure เราสามารถตั้งค่า attribute ให้กับ object นั้นๆได้เลย แต่ถ้ามีการเรียกใช้ค่า attribute ที่ไม่เคยประกาศมาก่อน จะถือว่า error
ตัวอย่าง



หรือเราจะให้มีการระบุค่าเริ่มต้นตอนสร้าง object เลยก็ได้ โดยเขียน method ที่ชื่อว่า __init__


Output



3. สร้าง Method
ตัวอย่าง



Output


หากเมธอดของเราต้องการให้ใช้ parameter จาก attribute ใน object นั้น เราจะใช้คำว่า self ในช่อง parameter และเมื่อเรียกใช้ ภายในเมธอดจะใช้คำสั่งว่า self.(attribute ที่ต้องการ)
   เวลาเรียกใช้ถ้าเป็น เมธอดที่มี self ในวงเว็บ จะต้องใส่วงเล็บด้วย ถ้าในวงเล็บไม่มี self เวลาเรียกใช้ไม่จำเป็นต้องใส่ก็ได้
 

การสืบทอด class (Extends)
ตัวอย่าง



Output


   การสืบทอด class จะทำให้สามารถใช้ attribute, constructure และ method ต่างๆใน class แม่ได้

วันพุธที่ 26 สิงหาคม พ.ศ. 2558

เขียนภาษา Python ด้วย NetBeans

1. สิ่งแรกที่คุณต้องมี คือ โปรแกรม NetBeans IDE 8.0.2 สามารถดาวน์โหลดได้ ที่นี่



ติดตั้งจนเสร็จสรรพแล้ว ในหน้า Desktop จะมี Icon ดังรูป


2. โหลด Python Plugins ที่นี่


จะได้ไฟล์ zip มา แตกเป็นโฟเดอร์ให้เรียบร้อย


3. เปิดโปรแกรม NetBeans ขึ้นมา แล้วไปเลือกแถบ Tool -->Plugins จะได้หน้าต่างดังรูป


4. ไปที่แถบ Downloads แล้วคลิ๊ก Add Plugins... แล้วเลือกที่อยู่ของโฟลเดอร์ ที่ได้จากข้อ 2 จากนั้นให้เลือกไฟล์ในโฟลเดอร์นั้นให้หมด กด open และกด Install


รอจน install เสร็จก็เป็นอันเรียบร้อย

5. เมื่อต้องการจะสร้าง Project ที่เป็นภาษา Python ให้เลือกหา โฟลเดอร์ที่เขียนว่า Python


เสร็จสิ้น


ขอบคุณข้อมูลจาก https://blogs.oracle.com/geertjan/entry/python_in_netbeans_ide_81