วันพุธที่ 20 มกราคม พ.ศ. 2559

Django Tutorial Part 3

ใน Part 3 จะกล่าวถึงการสร้าง views

view คือ อะไร ?

   view คือ ชนิดของ web page ใน django application ที่มีการทำงานเฉพาะ และมีรูปแบบเฉพาะ ยกตัวอย่างเช่น Blog application จะมี views ดังนี้
- Homepage : ใช้แสดงบทความล่าสุดหลายๆบทความ
- Entry detail page : ใช้แสดงบทความเดียว
- Comment action : ใช้สำหรับ post comment ลงบทความ

สำหรับ Poll application ของเรานั้น จะมีอยู่ 4 views ด้วยกัน
Question index page : แสดงคำถามล่าสุด หลายๆคำถาม
Question detail page : แสดงข้อความของคำถาม มีแบบฟอร์มสำหรับโหวต แต่ไม่ได้แสดงผลลัพธ์
Question result page : แสดงผลลัพธ์ของการโหวต
Vote action : สำหรับควบคุมการโหวต

ใน django นั้น webpage หรือเนื้อหาต่างๆจะถูกส่งมาจาก views แต่ละ view ถูกแทนในรูป python function/method ซึ่ง django จะเลือกใช้งาน view จาก URL ที่ request มา

หลังจากอธิบายเบื้องต้น Tutorial จึงให้เราลองเขียน view อื่นๆเพิ่มขึ้นมา

โดยให้ไปเพิ่ม function ที่ polls/views.py

และเชื่อมต่อ view ที่สร้างขึ้นมาใหม่ กับ url ใน polls/urls.py

แล้วก็ทดสอบเข้าหน้าเว็บที่สร้างขึ้น
(อย่าลืมเปิด server ด้วย $ python3 manage.py runserver)



หลังจากนั้น Tutorial ก็อธิบายเราต่อ

แต่ละ view จะมีการตอบสนอง 1 ใน 2 อย่าง
- return HttpResponse object ที่มีข้อมูลเนื้อหาของหน้าเพจที่ request
- สร้าง exception เช่น Http404

จากนั้น tutorial จะให้เราทำ view ให้ทำอะไรได้มากขึ้น โดยให้ index() view สามารถแสดงผล 5 คำถามล่าสุด โดยแบ่งแต่ละคำถามด้วย comma

และเมื่อลอง runserver ดู ก็สามารถแสดงผลลัพธ์ได้





แต่จากที่เห็น หน้าเพจมีลักษณะเป็นข้อความธรรมดาๆ ถ้าต้องการจะเปลี่ยนรูปแบบหน้าเพจ ต้องแก้ไข python code ใน view
ดังนั้น ใช้ template ของ django น่าจะดีกว่า

สร้าง directory ชื่อ templates ใน polls ซึ่ง django จะหา template ในนี้
และสร้าง subdirectory ชื่อ polls ใน templates ด้วย

สร้างไฟล์ index.html ใน polls/templates/polls/index.html

และอัพเดทให้ view เรียกใช้ templates

เมื่อทดลองเปิดหน้าเว็บจากการ run server

สร้าง 404 Error เมื่อหาไม่มีคำถามนั้นอยู่ในฐานข้อมูล (หา id นอกช่วงของ id ที่มีอยู่)

และสร้าง template ขึ้นมาด้วย


ทดลองดูคำถามที่มี id เกินกว่าที่มีอยู่




Django Tutorial Part 2

หลังจากในคาบ ผมก็ได้กลับมาลองทำตาม Tutorial Part 2 ต่อ

ได้เพิ่ม method __str__ ใน class Question และ Choice
ซึ่งเป็น method ที่ไว้แปลง object เป็น string ของ Python ลักษณะเหมือน method toString ในภาษาอื่น

และได้เพิ่ม method was_published_recently ใน class
ที่เป็น method สำหรับตรวจสอบว่า พึ่ง publish หรือเปล่า (publish มานานไม่เกิน1 วัน)

จากนั้นก็มาลอง python shell ตาม Tutorial ต่อ






พอถึงบรรทัด Question.objects.get(pub_date__year=current_year) ก็เกิด Error ขึ้นมา เพราะเนื่องจากผมทำซ้ำอีกรอบ แล้วทำให้มี object ที่เป็น class Question อยู่ 2 ตัว แล้วเมื่อใช้ method get มา เกิดการ return มา 2 object ซึ่ง method ควร return ค่าเดียว จึงทำให้ Error

แต่ไม่เป็นไร ผมจะข้ามบรรทัดนี้ไป ทำบรรทัดถัดๆไป


ใน part 2 มีการกล่าวถึงหน้า admin และการทำให้หน้า admin สามารถปรับ Question ได้ แต่ผมไม่ได้ทำตรงส่วนนี้

วันเสาร์ที่ 28 พฤศจิกายน พ.ศ. 2558

Link Bitbucket

นาย อารักษ์ ภูพาที
5701012620144

Assignment 1 : https://bitbucket.org/a5720144/vending-machine/src

Assignment 2 : https://bitbucket.org/a5720144/clean-csv/src
## Read me ##
testcsv.py เป็น file ที่ทดสอบในการ clean ข้อมูล ในแบบ textmode
แต่ตัวงานจริงๆคือ studentattendancecalculator.py

Test 2 :
+ Kangaroo
 - Textmode : https://bitbucket.org/a5720144/test1-textmode/src
 - Kivy : https://bitbucket.org/a5720144/test1-kivy/src
+ Insertion Sort
 - Textmode : https://bitbucket.org/a5720144/test2-text-mode/src
 - Kivy : https://bitbucket.org/a5720144/test2-kivy/src

Test 3 :
## Read me ##
อยู่ใน repository เดียวกันกับ Assignment 1
ข้อ 2 : Hashcode คือ ตั้งแต่ 42:5a3cc073fd63 จนถึง 44:1ab3b822dc19
ข้อ 3 : Hashcode คือ 45:6e38426399de

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

Python GUI : Starting with Kivy

ทำไมต้อง Kivy ?!?!?
- Kivy มี built-in ที่รองรับอุปกรณ์ Multitouch
- Kivy สามารถนำ code Python ไปทำงานบน Moblie ได้
- Kivy สามารถใช้แทน Graphical interface เช่น HTML , CSS ได้
- Kivy ทำให้สามารถเขียน Application เดียว แต่ทำงานได้หลาย OS

วิธีการ Installation (สำหรับ python3)

  
ตัวอย่างต่างๆ จะอยู่ใน /usr/share/kivy-examples

Version Control System : Install Mercurial

วิธีการ Install Mercurial

เปิด Terminal ขึ้นมา แล้วพิมคำสั่งตามด้านล่าง

credit : http://stackoverflow.com/questions/5627414/correct-way-to-install-mercurial-on-ubuntu

 จากนั้นก็ Install หน้าตาจะประมาณนี้



และนี่ คือคำสั่งพื้นฐานของ Mercurial สามารถทราบได้ด้วยการพิม hg ลงใน Terminal


จากนั้น cd ไปที่ตำแหน่งที่เราต้องการสร้าง Directory ที่ต้องการเก็บ Source code (สมมติ Directory ชื่อ Building) แล้วพิม

จะทำการสร้าง Directory ขึ้นมา

จากนั้นนำ File source code ไปเก็บใน Directory ที่สร้างขึ้น

จากนั้น cd ไป Directory ที่สร้างขึ้น แล้วพิม


Mercurial จะทำการตรวจสอบ File ใน Directory และจะทำการ Add ไฟล์ให้


จากนั้น ให้ทำการพิม

เพื่อทำการแก้ไขค่า username
โปรแกรมจะให้เลือก editor ที่ต้องการจะใช้ ในที่นี้ผมเลือก nano
https://bitbucket.org/a5720144/building-software-system-i
แล้วแก้ค่าตามนี้


โดย username คือ username ของเรา แล้วตามด้วย <email>
ส่วน default ใน paths คือ url ของ repository ใน bitbucket เพื่อที่เวลา push จะทำการ push ไปใน repository นี้โดยอัตโนมัติ

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

Python Practice : Capital

1111 : เมืองหลวง (Capital)
Problem type :
Time limit : 1.0 second(s)
Memory limit : 32 megabyte(s)
       ในประเทศแห่งหนึ่ง เมืองจำนวน N เมือง ถูกกำหนดชื่อด้วยจำนวนเต็มตั้งแต่ 1 ถึง N ที่ไม่ซ้ำกันเลย เมืองทั้งหมดถูกเชื่อมกันด้วยถนนทั้งสิ้น N-1 เส้น ทำให้เมืองสองเมืองใด ๆ สามารถไปมาหาสู่กันได้ด้วยเส้นทาง เส้นทางหนึ่งเสมอ

            คุณเป็นชาวบ้านคนหนึ่งที่อาศัยอยู่ที่เมืองหมายเลข 1 และคุณต้องการทราบว่าเมืองที่อยู่ไกลจากเมืองหมายเลข 1 ที่สุดนั้น ห่างจากเมืองหมายเลข 1 เท่าไร

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

บรรทัดแรกประกอบด้วยจำนวนนับ n แทนจำนวนเมืองทั้งหมด ( 1 < n < 100 001 )

บรรทัดถัดมา n-1 บรรทัดเป็นข้อมูลของถนนแต่ละเส้น โดยจะประกอบด้วยจำนวนเต็ม Xi Yi Zi แสดงว่าถนนเส้นที่ i เชื่อมระหว่างเมือง Xi และ Yi และมีความยาว Zi  ( 1 < Xi,Yi < n , Xi != Yi , 1 < Zi < 3000 )

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

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


หมายเหตุ มีชุดทดสอบทั้งสิ้น 28 ชุดโดย

          4 ชุดทดสอบ n = 11
            3 ชุดทดสอบ n = 101
            3 ชุดทดสอบ n = 10001
            5 ชุดทดสอบ n = 30001
            4 ชุดทดสอบ n = 50001
            9 ชุดทดสอบ n = 100001


โจทย์โดย : สรวิทย์  สุริยกาญจน์ ( PS.int )

ที่มา : ศูนย์ สอวน. โรงเรียนมหิดลวิทยานุสรณ์
ตัวอย่างข้อมูลนำเข้า ตัวอย่างข้อมูลส่งออก
11
1 2 1427
1 3 741
1 4 1763
1 5 2491
1 6 1849
2 7 1219
3 8 1100
4 9 1071
3 10 1587
2 11 1418
2845
11
1 2 2445
2 3 1474
3 4 2493
4 5 1596
5 6 605
6 7 1531
7 8 1462
8 9 1389
9 10 1726
10 11 2112
16833

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