ผลต่างระหว่างรุ่นของ "418546 ภาคต้น 2555"
ไปยังการนำทาง
ไปยังการค้นหา
(→คะแนน) |
|||
(ไม่แสดง 40 รุ่นระหว่างกลางโดยผู้ใช้ 22 คน) | |||
แถว 1: | แถว 1: | ||
ขอต้อนรับเข้าสู่เว็บไซต์วิชา '''01418546 การพัฒนาโปรแกรมประยุกต์สำหรับอุปกรณ์เคลื่อนที่ ภาคการศึกษาที่ 1 ปีการศึกษา 2555''' | ขอต้อนรับเข้าสู่เว็บไซต์วิชา '''01418546 การพัฒนาโปรแกรมประยุกต์สำหรับอุปกรณ์เคลื่อนที่ ภาคการศึกษาที่ 1 ปีการศึกษา 2555''' | ||
+ | |||
+ | ==ประกาศ== | ||
+ | * นิสิตรหัสต่อไปนี้ มีปัญหาเรื่องการตั้งค่า repository ให้แก้ไขให้เสร็จภายในวันที่ 8 กรกฎาคม 2555 ไม่เช่นนั้นจะถือไว้ขาดส่งงานในครั้งแรก | ||
+ | ** g5514401642 เอาสิ่งที่ไม่เกี่ยวข้องมาใส่ใน repository (กลับไปอ่านคำสั่งอีกครั้งว่าผมให้คุณทำอะไร) | ||
==ข้อควรทราบ== | ==ข้อควรทราบ== | ||
แถว 20: | แถว 24: | ||
* การบ้านและโครงงานย่อย 60 % | * การบ้านและโครงงานย่อย 60 % | ||
* final project 40 % | * final project 40 % | ||
+ | |||
+ | == คะแนน == | ||
+ | * [https://docs.google.com/spreadsheet/ccc?key=0AjORPkctCPUWdFc2MXlLbl92clU4TmtYMXlCLUpXYWc คะแนนครึ่งแรก] | ||
+ | * [https://docs.google.com/spreadsheet/ccc?key=0AjORPkctCPUWdEVGZGhqVTJkMTRVUGRFYllQTWZYRXc เกรด] | ||
+ | |||
+ | == โปรเจค == | ||
+ | |||
+ | === โปรเจคครั้งที่ 1=== | ||
+ | * [http://touchsi.com:8000/static/android/HelloPoly.apk ตัวอย่าง] | ||
+ | * ให้สร้างโปรแกรมที่ทำงานได้เหมือนกับโปรแกรมตัวอย่าง โดยที่โปรแกรมมีความสามารถในการทำงานดังนี้ | ||
+ | ** วาดรูป polygon ได้อย่างน้อย 2 ถึง 12 เหลี่ยม | ||
+ | ** แสดงชื่อรูป polygon ที่วาด (ดูวิธีการตั้งชื่อได้จาก [http://en.wikipedia.org/wiki/Polygon Wikipedia]) | ||
+ | ** เปลี่ยนลักษณะของเส้นที่ใช้วาดได้ 2 แบบ คือ เส้นปะ และ เส้นทึบ | ||
+ | ** เปลี่ยนขนาดของเส้นที่ใช้วาดได้ ตั้งแต่ 1 ถึง 20 pixel | ||
+ | ** สามารถหมุนรูป polygon โดยใช้ gesture | ||
+ | ** สามารถย้ายรูป polygon โดยใช้ gesture | ||
+ | ** โปรแกรมต้องสามารถเก็บฐานะของการวาดได้ นั้นคือเมื่อผู้ใช้ปิดโปรแกรมไปแล้ว เปิดมาอีกครั้งต้องเห็นรูปแบบการวาดครั้งล่าสุดอยู่ | ||
+ | * การส่งงาน | ||
+ | ** ให้ตั้งชื่อโปรเจคว่า HelloPoly แล้วเก็บไว้ที่ไฟร์เดอร์ projects | ||
+ | ** ให้สร้างไฟล์ README (ไม่ต้องใส่ .txt) โดยใช้ encoding แบบ UTF-8 ใส่ไว้ในโปรเจคโดยในไฟล์นี้ ให้เขียนว่าได้ทำฟังก์ชั่นใดตามตัวอย่างที่ให้ไปและทำโดยใช้วิธีไหน | ||
+ | ** ตัวอย่างในการเขียน README | ||
+ | |||
+ | วาดรูป และ แสดงชื่อ polygon ได้ 15 เหลี่ยม โดยใช้ slider bar ที่หน้าจอ | ||
+ | เปลี่ยนลักษณะของเส้นได้ 2 แบบ โดยใช้ Preference Screen | ||
+ | เปลี่ยนขนาดของเส้นได้ 1 ถึง 20 pixel โดยใช้ปุ่มกดที่หน้าจอ | ||
+ | ไม่สามารถหมุนรูปได้ | ||
+ | สามารถย้ายรูปได้โดยการกดค้างแล้วลาก | ||
+ | โปรแกรมสามารถเก็บฐานะการวาดรูปได้บางส่วน ยกเว้นตำแหน่งของรูปเมื่อมีการย้ายรูป | ||
+ | |||
+ | หรือถ้าใครทำได้เหมือนในตัวอย่างทุกประการ อาจเขียนว่า | ||
+ | |||
+ | ทำได้เหมือนตัวอย่างทุกประการ | ||
+ | |||
+ | * ไฟล์ README สำคัญมาก '''ถ้าใครไม่เขียนจะไม่ได้รับการตรวจ''' เพราะผมจะตรวจเฉพาะฟังก์ชั่นการทำงานที่เขียนไว้ในไฟล์ README เท่านั้น หรือ ถ้าใครเขียนมาแล้วทำไม่ได้จริง จะถูกหักคะแนนเพราะถือว่าเป็นการหลอกลวงอาจารย์ | ||
+ | * '''กำหนดส่งวันที่ 28 กรกฎาคม 2555 ก่อนเที่ยงคืน''' | ||
+ | |||
+ | === โปรเจคครั้งที่ 2=== | ||
+ | * [http://access.cs.sci.ku.ac.th/~sutee/android/Paparazzi.apk ตัวอย่าง] | ||
+ | * ความสามารถของโปรแกรมที่จำเป็น | ||
+ | |||
+ | # เพิ่ม/ลบ รายชื่อผู้ใช้ของ Flickr ที่เราต้องการดูรูปภาพได้ | ||
+ | # เรียกดูภาพที่ถูกแชร์แบบ public ได้ | ||
+ | # มีรายการรายการแสดงภาพที่ถูกเรียกดูครั้งล่าสุด | ||
+ | # ข้อมูลต่างๆ ที่ถูกโหลดมาแล้วให้เก็บไว้ในฐานข้อมูล | ||
+ | |||
+ | * ความสามารถเพิ่มเติม (หากทำจะได้คะแนนพิเศษ) | ||
+ | |||
+ | # หากรูปมีการกำกับ Geolocation จะถูกแสดงในแผนที่โดยใช้ Google Map | ||
+ | |||
+ | ====การใช้ Flickr API==== | ||
+ | * ลงทะเบียนเพื่อขอ API Key [http://www.flickr.com/services/apps/create/apply/ http://www.flickr.com/services/apps/create/apply/] | ||
+ | ** API Key จำเป็นต้องใช้ทุกครั้งเมื่อมีการร้องขอข้อมูลไปยัง Flickr | ||
+ | * การร้องขอผ่าน REST Request | ||
+ | ** [http://www.flickr.com/services/api/request.rest.html http://www.flickr.com/services/api/request.rest.html] | ||
+ | ** แนะนำให้ใช้ JSON เป็น format ในการส่งข้อมูลกลับมา โดยส่งค่า format=json ไปในการร้องขอ | ||
+ | * การรับข้อมูลส่งกลับ JSON Response | ||
+ | ** [http://www.flickr.com/services/api/response.json.html http://www.flickr.com/services/api/response.json.html] | ||
+ | ** ข้อความที่ส่งกลับมาจะอยู่ในรูปแบบ "jsonFlickrApi({...})" ดังนั้นก่อนที่จะนำข้อความไปประมวลเพื่อใช้ได้ [http://developer.android.com/reference/org/json/JSONObject.html JSONObject] จำเป็นต้องตัด ข้อความในส่วนของ "jsonFlickrApi()" ทิ้งก่อนเพื่อให้เหลือเฉพาะส่วน "{...}" เท่านั้น ตัวอย่างเช่น | ||
+ | |||
+ | JSONObject jsonObject = new JSONObject(response.replace("jsonFlickrApi", "").substring(1, tmp.length()-1)); | ||
+ | |||
+ | * การใช้งานรูปภาพ | ||
+ | **[http://www.flickr.com/services/api/misc.urls.html http://www.flickr.com/services/api/misc.urls.html] | ||
+ | * การใช้งาน Buddyicons (รูป avatar ของ ผู้ใช้) | ||
+ | **[http://www.flickr.com/services/api/misc.buddyicons.html http://www.flickr.com/services/api/misc.buddyicons.html] | ||
+ | * API Methods ที่จำเป็น | ||
+ | ** ค้นหาผู้ใช้ด้วย Email | ||
+ | *** [http://www.flickr.com/services/api/flickr.people.findByEmail.html http://www.flickr.com/services/api/flickr.people.findByEmail.html] | ||
+ | ** ค้นหาผู้ใช้ด้วย username | ||
+ | *** [http://www.flickr.com/services/api/flickr.people.findByUsername.html http://www.flickr.com/services/api/flickr.people.findByUsername.html] | ||
+ | ** ข้อมูลส่วนตัวของผู้ใช้ | ||
+ | *** [http://www.flickr.com/services/api/flickr.people.getInfo.html http://www.flickr.com/services/api/flickr.people.getInfo.html] | ||
+ | ** รูปภาพที่แชร์แบบ public | ||
+ | *** [http://www.flickr.com/services/api/flickr.people.getPublicPhotos.html http://www.flickr.com/services/api/flickr.people.getPublicPhotos.html] | ||
+ | |||
+ | ====การใช้ Tab Activity==== | ||
+ | [http://developer.android.com/resources/tutorials/views/hello-tabwidget.html http://developer.android.com/resources/tutorials/views/hello-tabwidget.html] | ||
+ | |||
+ | ====การใช้ Google Map==== | ||
+ | [http://developer.android.com/resources/tutorials/views/hello-mapview.html http://developer.android.com/resources/tutorials/views/hello-mapview.html] | ||
+ | |||
+ | ====การส่งงาน==== | ||
+ | * ให้สร้างโปรเจคชื่อ Paparazzi ไว้ในโฟร์เดอร์ projects | ||
+ | * เขียน README กำกับอธิบายวิธีการใช้งานโปรแกรมไว้ด้วย โดยเฉพาะกรณีที่โปรแกรมทำงานไม่เหมือนโปรแกรมตัวอย่าง หากโปรแกรมทำได้เหมือนโปรแกรมตัวอย่างทุกประการ สามารถเขียนใน README สั้นๆ ได้ว่า "โปรแกรมทำงานได้เหมือนตัวอย่างทุกประการ" | ||
+ | * การตรวจงานผมจะเริ่มตรวจที่ README ก่อน ดังนั้นหากใครไม่เขียน README งานจะไม่ได้รับการตรวจ | ||
+ | * กำหนดส่งวันที่ 1 กันยายน 2555 ก่อนเที่ยงคืน | ||
+ | |||
+ | |||
+ | === โปรเจคครั้งที่ 3 === | ||
+ | |||
+ | ==== การตั้งชื่อโปรเจค ==== | ||
+ | ให้ตั้งชื่อโปรเจคว่า FinalProject แล้วใส่ไว้ในโฟล์เดอร์ projects | ||
+ | |||
+ | ==== การส่งงาน ==== | ||
+ | สิ่งที่ต้องส่งมีดังนี้ | ||
+ | * เอกสารอธิบายโปรแกรม การออกแบบระบบ และ การใช้งานเบื้องต้น | ||
+ | ** ให้สร้างเป็น pdf ใส่ไว้ในโปรเจคโดยตั้งชื่อว่า report.pdf | ||
+ | ** ในกรณีของโปรเจคที่ทำมากกว่าหนึ่งคนให้เขียนในรายงานอย่างละเอียดว่าใครทำส่วนไหน โค้ดแต่ละส่วนใครเป็นคนเขียนไฟล์ไหนบรรทัดไหนบ้าง | ||
+ | * ลิงก์ของไฟล์ apk (ใช้สำรองในการกรณีที่มีปัญหาในการคอมไฟล์) | ||
+ | ** เขียนไว้ใน README | ||
+ | * ลิงก์ของการนำเสนอโปรเจคบน YouTube (ความยาวไม่ควรเกิน 10 นาที และ ควรใช้ความละเอียดมากที่สุดเท่าที่เป็นไปได้) | ||
+ | ** เขียนไว้ใน README | ||
+ | * ในตอนท้ายของวีดีโอการนำเสนอโปรเจคให้ทดสอบโปรแกรมโดยใช้ Monkey ตามคำสั่งต่อไปนี้ | ||
+ | |||
+ | adb shell monkey -p your.package.name -s 01418546 1000 | ||
+ | |||
+ | ==== ข้อแนะนำ ==== | ||
+ | * โปรแกรมต้องทำงานได้จริง นั้นหมายความว่า ถ้าโปรเจคใดมีการติดตั้ง server ที่สร้างขึ้นเอง server นั้นต้องสามารถเข้าถึงได้ในเวลาที่ผมตรวจโปรเจค | ||
+ | * โปรแกรมควรมี UI ที่ไม่น่าเกลียด และมีประสิทธิภาพในการทำงานที่เร็ว | ||
+ | * โปรแกรมควรครอบคลุมเนื้อหาที่ได้ถูกสอนไปในวิชานี้ | ||
+ | |||
+ | ==== การให้คะแนน ==== | ||
+ | * เอกสารและการนำเสนอ 5% | ||
+ | * โปรแกรม 35% | ||
+ | |||
+ | ==== กำหนดส่ง ==== | ||
+ | วันที่ 1 ตุลาคม 2555 | ||
== การบ้าน == | == การบ้าน == | ||
แถว 26: | แถว 147: | ||
* ให้ตั้งชื่อโปรเจคว่า Homework01 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ | * ให้ตั้งชื่อโปรเจคว่า Homework01 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ | ||
* สีที่ใช้ในการ random ต้องมีไม่ต่ำกว่า 5 สี | * สีที่ใช้ในการ random ต้องมีไม่ต่ำกว่า 5 สี | ||
− | * ห้ามสร้างโปรเจคจากโปรเจคตัวอย่างเด็ดขาด ให้สร้างโปรเจคใหม่เสมอ | + | * ห้ามสร้างโปรเจคจากโปรเจคตัวอย่างเด็ดขาด ให้สร้างโปรเจคใหม่เสมอ แต่สามารถคัดลอกโค้ดบางส่วนของตัวอย่างมาใช้ได้ แต่ผมแนะนำว่าควรพิมพ์เองจะดีกว่า เพราะจะทำให้คุณคุ้นเคยกับการเขียน Android ได้ดีขึ้น |
− | * | + | * ทุกครั้งที่ส่งงานให้ตรวจสอบดูด้วยว่าโปรเจคของคุณขึ้นไปอยู่ใน repository เรียบร้อยหรือยัง เพราะผมจะ clone repository ของคุณมาตรวจ ถ้าครบกำหนดส่งแล้วผมไม่สามารถเห็น project ของคุณบน repository ผมจะถือว่าคุณขาดส่งงานในครั้งนั้น |
− | * | + | * การ clone งานมาตรวจผมจะใช้คำสั่ง <tt>git clone git@bitbucket.org:your_user_name/works418546mobileapp.git</tt> โดยที่ your_user_name คือ username ที่ผมให้คุณส่ง E-Homework ใน Maxlearn |
* ให้ตรวจสอบความถูกต้องเรื่องสิทธิ์ในการเข้าถึงว่าคุณให้สิทธิ์ในการอ่านกับผม (ssutee) หรือเปล่า และ ชื่อ repository ถูกต้องหรือเปล่า | * ให้ตรวจสอบความถูกต้องเรื่องสิทธิ์ในการเข้าถึงว่าคุณให้สิทธิ์ในการอ่านกับผม (ssutee) หรือเปล่า และ ชื่อ repository ถูกต้องหรือเปล่า | ||
* ห้ามส่งงานทางอีเมลโดยเด็ดขาด ใครส่งมานอกจากผมจะไม่ตรวจ ผมจะหักคะแนนเพิ่มอีกด้วย | * ห้ามส่งงานทางอีเมลโดยเด็ดขาด ใครส่งมานอกจากผมจะไม่ตรวจ ผมจะหักคะแนนเพิ่มอีกด้วย | ||
− | * การ compile งานเพื่อตรวจผมจะทำผ่านทาง command line โดยใช้คำสั่ง ant ดังนั้นก่อนส่งโปรเจคให้คุณสั่งคำสั่งบน command line ว่า android update project (android เป็น tool ที่มาพร้อมกับ Android SDK คุณต้องกำหนด PATH ไปที่โฟร์เดอร์ tools ของ Android SDK ก่อนถึงจะเรียกใช้คำสั่งนี้ได้) ถ้าทำได้ถูกต้องไฟล์ชื่อ build.xml จะปรากฎขึ้น | + | * การ compile งานเพื่อตรวจผมจะทำผ่านทาง command line โดยใช้คำสั่ง ant ดังนั้นก่อนส่งโปรเจคให้คุณสั่งคำสั่งบน command line ว่า <tt>android update project -p .</tt> (android เป็น tool ที่มาพร้อมกับ Android SDK คุณต้องกำหนด PATH ไปที่โฟร์เดอร์ tools ของ Android SDK ก่อนถึงจะเรียกใช้คำสั่งนี้ได้) ถ้าทำได้ถูกต้องไฟล์ชื่อ <tt>build.xml</tt> จะปรากฎขึ้น |
+ | * เพื่อความแน่ใจให้ทดลองสั่งคำสั่ง <tt>ant debug</tt> เพื่อตรวจสอบว่าสามารถสร้าง binary ไฟล์ของโปรเจคได้หรือไม่ (โปรแกรม ant บน Windows ผมไม่แน่ใจว่ามันอยู่ที่โฟรเดอร์ไหน แต่เข้าใจว่ามันจะมาพร้อมกับ Java SDK ส่วนบน OS X สามารถเรียกใช้ผ่านทาง command line ได้อยู่แล้ว) | ||
+ | * เมื่อทุกอย่างเรียบร้อยแล้วจึง commit และ push ขึ้นไปยัง repository เพื่อรอการตรวจต่อไป | ||
+ | |||
+ | === การบ้านครั้งที่ 2 === | ||
+ | * ให้ตั้งชื่อโปรเจคว่า Homework02 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ | ||
+ | * ให้สร้าง DotView เหมือนตัวอย่างที่แสดงให้ดูในห้องเรียน แต่ให้ จุด สามารถเปลี่ยนแปลงสีและขนาดแบบสุ่มได้ เหมือนในการบ้านครั้งที่ 1 ที่ทำกับ ListView | ||
+ | ** เมื่อสัมผัสหน้าจอให้สร้างจุดใหม่ที่มีสีและขนาดคงที่ขึ้นมาหนึ่งจุดตรงจุดที่สัมผัส | ||
+ | ** การเพิ่ม แก้ไข หรือ ลบ จุด ทั้งบน ListView และ DotView ต้องสัมพันธ์กัน | ||
+ | ** การแก้ไขและลบ จุด ให้ทำผ่านทาง ListView ก็พอ แต่ถ้าใครสามารถทำผ่านทาง DotView ได้จะมีคะแนนพิเศษให้ | ||
+ | |||
+ | === การบ้านครั้งที่ 3 === | ||
+ | * ให้ตั้งชื่อโปรเจคว่า Homework03 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ | ||
+ | * ให้ทำการบ้านครั้งที่ 2 ใหม่โดยใช้ฐานข้อมูลในการเก็บค่าจุด | ||
+ | |||
+ | === การบ้านครั้งที่ 5 === | ||
+ | * ให้ตั้งชื่อโปรเจคว่า Homework05 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ | ||
+ | * ทำต่อจากการบ้านครั้งที่ 4 โดยย้ายฟังก์ชั่นการทำงานเกี่ยวกับจุดทั้งหมดไปไว้ใน Service | ||
+ | * กำหนดให้ Service เริ่มทำงานทุกครั้งที่มีการ boot เครื่อง | ||
+ | * บังคับให้ Service สุ่มค่าจุดขึ้นมาทุกๆ 5 วินาที | ||
+ | * ถ้าเกิดจุดสีที่กำหนดขึ้น ให้แสดง Notification แจ้งเตือน | ||
+ | * การส่งการบ้านครั้งนี้ต้องเขียนไฟล์ README กำกับไว้ด้วย โดยให้เขียนดังนี้ (ให้ไม่มีไฟล์ README จะได้ 0 คะแนนทันที) | ||
+ | ** เขียนว่า Service จะดับรอสีอะไร เพื่อแสดง notification | ||
+ | ** ในกรณีโปรแกรมทำงานไม่สมบูรณ์ให้เขียนบอกด้วยว่าทำอะไรได้บ้างและทำอะไรไม่ได้ | ||
+ | ** หากทำโปรแกรมได้สมบูรณ์ทุกอย่างก็ให้เขียนบอกไว้ใน README ด้วยว่าโปรแกรมทำงานได้สมบูรณ์ทุกอย่าง | ||
== ตัวอย่างในห้องเรียน == | == ตัวอย่างในห้องเรียน == | ||
แถว 61: | แถว 206: | ||
<td>ListView</td> | <td>ListView</td> | ||
<td>ใช้ slide ของครั้งแรก</td> | <td>ใช้ slide ของครั้งแรก</td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>8 กรกฎาคม 2555</td> | ||
+ | <td>UI</td> | ||
+ | <td>[https://bitbucket.org/ssutee/418546_mobileapp/src/8c2f992a5d33/slides/02-ui_components.pdf PDF]</td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>15 กรกฎาคม 2555</td> | ||
+ | <td>Building your own widgets</td> | ||
+ | <td>[https://bitbucket.org/ssutee/418496_mobileapp/src/b60a711186cd/slides/02-drawing.pdf PDF]</td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>22 กรกฎาคม 2555</td> | ||
+ | <td>Life cycle <br/> State instance data<br/>Persistent data</td> | ||
+ | <td> | ||
+ | [https://bitbucket.org/ssutee/418546_mobileapp/src/5e6d77eb3e9b/slides/lifecycle.pdf PDF] | ||
+ | [https://bitbucket.org/ssutee/418546_mobileapp/src/5e6d77eb3e9b/slides/03-persistent_data.pdf PDF] | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>28 กรกฎาคม 2555</td> | ||
+ | <td>Database and CursorAdapter</td> | ||
+ | <td> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>5 สิงหาคม 2555</td> | ||
+ | <td>Content Provider and Loader</td> | ||
+ | <td> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>12 สิงหาคม 2555</td> | ||
+ | <td>Services</td> | ||
+ | <td> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>19 สิงหาคม 2555</td> | ||
+ | <td>Threads</td> | ||
+ | <td> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>26 สิงหาคม 2555</td> | ||
+ | <td>RESTful applications</td> | ||
+ | <td> | ||
+ | [http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html Google IO 2010] | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>2 กันยายน 2555</td> | ||
+ | <td>Google Cloud Messaging</td> | ||
+ | <td> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>9 กันยายน 2555</td> | ||
+ | <td>Fragments</td> | ||
+ | <td> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>16 กันยายน 2555</td> | ||
+ | <td>RoboGuice: Google Guice on Android</td> | ||
+ | <td> | ||
+ | [http://www.blog.project13.pl/wp-content/uploads/2011/12/presentation.html Deep dive into RoboGuice] | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>23 กันยายน 2555</td> | ||
+ | <td>Testing</td> | ||
+ | <td> | ||
+ | </td> | ||
</tr> | </tr> | ||
</table> | </table> | ||
+ | |||
+ | == เครื่องมืออำนวยความสะดวก == | ||
+ | * [https://github.com/ssutee/adbgen Android database generator] | ||
+ | * [https://github.com/ssutee/rest-client-android Android asynchronized REST client] |
รุ่นแก้ไขปัจจุบันเมื่อ 06:59, 4 ตุลาคม 2555
ขอต้อนรับเข้าสู่เว็บไซต์วิชา 01418546 การพัฒนาโปรแกรมประยุกต์สำหรับอุปกรณ์เคลื่อนที่ ภาคการศึกษาที่ 1 ปีการศึกษา 2555
เนื้อหา
ประกาศ
- นิสิตรหัสต่อไปนี้ มีปัญหาเรื่องการตั้งค่า repository ให้แก้ไขให้เสร็จภายในวันที่ 8 กรกฎาคม 2555 ไม่เช่นนั้นจะถือไว้ขาดส่งงานในครั้งแรก
- g5514401642 เอาสิ่งที่ไม่เกี่ยวข้องมาใส่ใน repository (กลับไปอ่านคำสั่งอีกครั้งว่าผมให้คุณทำอะไร)
ข้อควรทราบ
สิ่งที่จะสอน
- การออกแบบและพัฒนาโปรแกรมประยุกต์"ที่ดี"สำหรับอุปกรณ์เคลื่อนที่
- ในการสอนครั้งนี้จะใช้ระบบปฏิบัติการ Android และใช้การพัฒนาแบบ native (ไม่สอนการพัฒนาโดยใช้ HTML5)
สิ่งที่จะไม่สอน (ควรรู้ก่อนเรียน)
- โปรแกรมภาษา Java
- การออกแบบฐานข้อมูลและภาษา SQL
- หลักการเขียนโปรแกรมแบบ OOP
การให้งานและส่งงาน
- การให้งานและส่งงานจะใช้ Git (เหมือนกับ Mercurial ที่เคยใช้ในวิชา Computer Programming)
- วิธีการส่งงานดูได้จาก ที่นี้ แต่ให้เปลี่ยนจาก works418496mobileapp เป็น works418546mobileapp แทน
- วิชานี้ไม่มีการสอบข้อเขียนใช้การส่งการบ้านและโปรเจค ดังนั้นจึงมีการบ้านและโปรเจคที่ต้องส่งอย่างน้อย 2 สัปดาห์/ครั้ง
- นิสิตต้องทำ final project หนึ่งชิ้นต่อกลุ่ม และ แต่ละงานต้องไม่ซ้ำกัน
การให้คะแนน
- การบ้านและโครงงานย่อย 60 %
- final project 40 %
คะแนน
โปรเจค
โปรเจคครั้งที่ 1
- ตัวอย่าง
- ให้สร้างโปรแกรมที่ทำงานได้เหมือนกับโปรแกรมตัวอย่าง โดยที่โปรแกรมมีความสามารถในการทำงานดังนี้
- วาดรูป polygon ได้อย่างน้อย 2 ถึง 12 เหลี่ยม
- แสดงชื่อรูป polygon ที่วาด (ดูวิธีการตั้งชื่อได้จาก Wikipedia)
- เปลี่ยนลักษณะของเส้นที่ใช้วาดได้ 2 แบบ คือ เส้นปะ และ เส้นทึบ
- เปลี่ยนขนาดของเส้นที่ใช้วาดได้ ตั้งแต่ 1 ถึง 20 pixel
- สามารถหมุนรูป polygon โดยใช้ gesture
- สามารถย้ายรูป polygon โดยใช้ gesture
- โปรแกรมต้องสามารถเก็บฐานะของการวาดได้ นั้นคือเมื่อผู้ใช้ปิดโปรแกรมไปแล้ว เปิดมาอีกครั้งต้องเห็นรูปแบบการวาดครั้งล่าสุดอยู่
- การส่งงาน
- ให้ตั้งชื่อโปรเจคว่า HelloPoly แล้วเก็บไว้ที่ไฟร์เดอร์ projects
- ให้สร้างไฟล์ README (ไม่ต้องใส่ .txt) โดยใช้ encoding แบบ UTF-8 ใส่ไว้ในโปรเจคโดยในไฟล์นี้ ให้เขียนว่าได้ทำฟังก์ชั่นใดตามตัวอย่างที่ให้ไปและทำโดยใช้วิธีไหน
- ตัวอย่างในการเขียน README
วาดรูป และ แสดงชื่อ polygon ได้ 15 เหลี่ยม โดยใช้ slider bar ที่หน้าจอ เปลี่ยนลักษณะของเส้นได้ 2 แบบ โดยใช้ Preference Screen เปลี่ยนขนาดของเส้นได้ 1 ถึง 20 pixel โดยใช้ปุ่มกดที่หน้าจอ ไม่สามารถหมุนรูปได้ สามารถย้ายรูปได้โดยการกดค้างแล้วลาก โปรแกรมสามารถเก็บฐานะการวาดรูปได้บางส่วน ยกเว้นตำแหน่งของรูปเมื่อมีการย้ายรูป
หรือถ้าใครทำได้เหมือนในตัวอย่างทุกประการ อาจเขียนว่า
ทำได้เหมือนตัวอย่างทุกประการ
- ไฟล์ README สำคัญมาก ถ้าใครไม่เขียนจะไม่ได้รับการตรวจ เพราะผมจะตรวจเฉพาะฟังก์ชั่นการทำงานที่เขียนไว้ในไฟล์ README เท่านั้น หรือ ถ้าใครเขียนมาแล้วทำไม่ได้จริง จะถูกหักคะแนนเพราะถือว่าเป็นการหลอกลวงอาจารย์
- กำหนดส่งวันที่ 28 กรกฎาคม 2555 ก่อนเที่ยงคืน
โปรเจคครั้งที่ 2
- ตัวอย่าง
- ความสามารถของโปรแกรมที่จำเป็น
- เพิ่ม/ลบ รายชื่อผู้ใช้ของ Flickr ที่เราต้องการดูรูปภาพได้
- เรียกดูภาพที่ถูกแชร์แบบ public ได้
- มีรายการรายการแสดงภาพที่ถูกเรียกดูครั้งล่าสุด
- ข้อมูลต่างๆ ที่ถูกโหลดมาแล้วให้เก็บไว้ในฐานข้อมูล
- ความสามารถเพิ่มเติม (หากทำจะได้คะแนนพิเศษ)
- หากรูปมีการกำกับ Geolocation จะถูกแสดงในแผนที่โดยใช้ Google Map
การใช้ Flickr API
- ลงทะเบียนเพื่อขอ API Key http://www.flickr.com/services/apps/create/apply/
- API Key จำเป็นต้องใช้ทุกครั้งเมื่อมีการร้องขอข้อมูลไปยัง Flickr
- การร้องขอผ่าน REST Request
- http://www.flickr.com/services/api/request.rest.html
- แนะนำให้ใช้ JSON เป็น format ในการส่งข้อมูลกลับมา โดยส่งค่า format=json ไปในการร้องขอ
- การรับข้อมูลส่งกลับ JSON Response
- http://www.flickr.com/services/api/response.json.html
- ข้อความที่ส่งกลับมาจะอยู่ในรูปแบบ "jsonFlickrApi({...})" ดังนั้นก่อนที่จะนำข้อความไปประมวลเพื่อใช้ได้ JSONObject จำเป็นต้องตัด ข้อความในส่วนของ "jsonFlickrApi()" ทิ้งก่อนเพื่อให้เหลือเฉพาะส่วน "{...}" เท่านั้น ตัวอย่างเช่น
JSONObject jsonObject = new JSONObject(response.replace("jsonFlickrApi", "").substring(1, tmp.length()-1));
- การใช้งานรูปภาพ
- การใช้งาน Buddyicons (รูป avatar ของ ผู้ใช้)
- API Methods ที่จำเป็น
- ค้นหาผู้ใช้ด้วย Email
- ค้นหาผู้ใช้ด้วย username
- ข้อมูลส่วนตัวของผู้ใช้
- รูปภาพที่แชร์แบบ public
การใช้ Tab Activity
http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
การใช้ Google Map
http://developer.android.com/resources/tutorials/views/hello-mapview.html
การส่งงาน
- ให้สร้างโปรเจคชื่อ Paparazzi ไว้ในโฟร์เดอร์ projects
- เขียน README กำกับอธิบายวิธีการใช้งานโปรแกรมไว้ด้วย โดยเฉพาะกรณีที่โปรแกรมทำงานไม่เหมือนโปรแกรมตัวอย่าง หากโปรแกรมทำได้เหมือนโปรแกรมตัวอย่างทุกประการ สามารถเขียนใน README สั้นๆ ได้ว่า "โปรแกรมทำงานได้เหมือนตัวอย่างทุกประการ"
- การตรวจงานผมจะเริ่มตรวจที่ README ก่อน ดังนั้นหากใครไม่เขียน README งานจะไม่ได้รับการตรวจ
- กำหนดส่งวันที่ 1 กันยายน 2555 ก่อนเที่ยงคืน
โปรเจคครั้งที่ 3
การตั้งชื่อโปรเจค
ให้ตั้งชื่อโปรเจคว่า FinalProject แล้วใส่ไว้ในโฟล์เดอร์ projects
การส่งงาน
สิ่งที่ต้องส่งมีดังนี้
- เอกสารอธิบายโปรแกรม การออกแบบระบบ และ การใช้งานเบื้องต้น
- ให้สร้างเป็น pdf ใส่ไว้ในโปรเจคโดยตั้งชื่อว่า report.pdf
- ในกรณีของโปรเจคที่ทำมากกว่าหนึ่งคนให้เขียนในรายงานอย่างละเอียดว่าใครทำส่วนไหน โค้ดแต่ละส่วนใครเป็นคนเขียนไฟล์ไหนบรรทัดไหนบ้าง
- ลิงก์ของไฟล์ apk (ใช้สำรองในการกรณีที่มีปัญหาในการคอมไฟล์)
- เขียนไว้ใน README
- ลิงก์ของการนำเสนอโปรเจคบน YouTube (ความยาวไม่ควรเกิน 10 นาที และ ควรใช้ความละเอียดมากที่สุดเท่าที่เป็นไปได้)
- เขียนไว้ใน README
- ในตอนท้ายของวีดีโอการนำเสนอโปรเจคให้ทดสอบโปรแกรมโดยใช้ Monkey ตามคำสั่งต่อไปนี้
adb shell monkey -p your.package.name -s 01418546 1000
ข้อแนะนำ
- โปรแกรมต้องทำงานได้จริง นั้นหมายความว่า ถ้าโปรเจคใดมีการติดตั้ง server ที่สร้างขึ้นเอง server นั้นต้องสามารถเข้าถึงได้ในเวลาที่ผมตรวจโปรเจค
- โปรแกรมควรมี UI ที่ไม่น่าเกลียด และมีประสิทธิภาพในการทำงานที่เร็ว
- โปรแกรมควรครอบคลุมเนื้อหาที่ได้ถูกสอนไปในวิชานี้
การให้คะแนน
- เอกสารและการนำเสนอ 5%
- โปรแกรม 35%
กำหนดส่ง
วันที่ 1 ตุลาคม 2555
การบ้าน
การบ้านครั้งที่ 1
- ให้ตั้งชื่อโปรเจคว่า Homework01 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ
- สีที่ใช้ในการ random ต้องมีไม่ต่ำกว่า 5 สี
- ห้ามสร้างโปรเจคจากโปรเจคตัวอย่างเด็ดขาด ให้สร้างโปรเจคใหม่เสมอ แต่สามารถคัดลอกโค้ดบางส่วนของตัวอย่างมาใช้ได้ แต่ผมแนะนำว่าควรพิมพ์เองจะดีกว่า เพราะจะทำให้คุณคุ้นเคยกับการเขียน Android ได้ดีขึ้น
- ทุกครั้งที่ส่งงานให้ตรวจสอบดูด้วยว่าโปรเจคของคุณขึ้นไปอยู่ใน repository เรียบร้อยหรือยัง เพราะผมจะ clone repository ของคุณมาตรวจ ถ้าครบกำหนดส่งแล้วผมไม่สามารถเห็น project ของคุณบน repository ผมจะถือว่าคุณขาดส่งงานในครั้งนั้น
- การ clone งานมาตรวจผมจะใช้คำสั่ง git clone git@bitbucket.org:your_user_name/works418546mobileapp.git โดยที่ your_user_name คือ username ที่ผมให้คุณส่ง E-Homework ใน Maxlearn
- ให้ตรวจสอบความถูกต้องเรื่องสิทธิ์ในการเข้าถึงว่าคุณให้สิทธิ์ในการอ่านกับผม (ssutee) หรือเปล่า และ ชื่อ repository ถูกต้องหรือเปล่า
- ห้ามส่งงานทางอีเมลโดยเด็ดขาด ใครส่งมานอกจากผมจะไม่ตรวจ ผมจะหักคะแนนเพิ่มอีกด้วย
- การ compile งานเพื่อตรวจผมจะทำผ่านทาง command line โดยใช้คำสั่ง ant ดังนั้นก่อนส่งโปรเจคให้คุณสั่งคำสั่งบน command line ว่า android update project -p . (android เป็น tool ที่มาพร้อมกับ Android SDK คุณต้องกำหนด PATH ไปที่โฟร์เดอร์ tools ของ Android SDK ก่อนถึงจะเรียกใช้คำสั่งนี้ได้) ถ้าทำได้ถูกต้องไฟล์ชื่อ build.xml จะปรากฎขึ้น
- เพื่อความแน่ใจให้ทดลองสั่งคำสั่ง ant debug เพื่อตรวจสอบว่าสามารถสร้าง binary ไฟล์ของโปรเจคได้หรือไม่ (โปรแกรม ant บน Windows ผมไม่แน่ใจว่ามันอยู่ที่โฟรเดอร์ไหน แต่เข้าใจว่ามันจะมาพร้อมกับ Java SDK ส่วนบน OS X สามารถเรียกใช้ผ่านทาง command line ได้อยู่แล้ว)
- เมื่อทุกอย่างเรียบร้อยแล้วจึง commit และ push ขึ้นไปยัง repository เพื่อรอการตรวจต่อไป
การบ้านครั้งที่ 2
- ให้ตั้งชื่อโปรเจคว่า Homework02 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ
- ให้สร้าง DotView เหมือนตัวอย่างที่แสดงให้ดูในห้องเรียน แต่ให้ จุด สามารถเปลี่ยนแปลงสีและขนาดแบบสุ่มได้ เหมือนในการบ้านครั้งที่ 1 ที่ทำกับ ListView
- เมื่อสัมผัสหน้าจอให้สร้างจุดใหม่ที่มีสีและขนาดคงที่ขึ้นมาหนึ่งจุดตรงจุดที่สัมผัส
- การเพิ่ม แก้ไข หรือ ลบ จุด ทั้งบน ListView และ DotView ต้องสัมพันธ์กัน
- การแก้ไขและลบ จุด ให้ทำผ่านทาง ListView ก็พอ แต่ถ้าใครสามารถทำผ่านทาง DotView ได้จะมีคะแนนพิเศษให้
การบ้านครั้งที่ 3
- ให้ตั้งชื่อโปรเจคว่า Homework03 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ
- ให้ทำการบ้านครั้งที่ 2 ใหม่โดยใช้ฐานข้อมูลในการเก็บค่าจุด
การบ้านครั้งที่ 5
- ให้ตั้งชื่อโปรเจคว่า Homework05 แล้วใส่ไว้ในโฟร์เดอร์ exercises ใน repository ของคุณ
- ทำต่อจากการบ้านครั้งที่ 4 โดยย้ายฟังก์ชั่นการทำงานเกี่ยวกับจุดทั้งหมดไปไว้ใน Service
- กำหนดให้ Service เริ่มทำงานทุกครั้งที่มีการ boot เครื่อง
- บังคับให้ Service สุ่มค่าจุดขึ้นมาทุกๆ 5 วินาที
- ถ้าเกิดจุดสีที่กำหนดขึ้น ให้แสดง Notification แจ้งเตือน
- การส่งการบ้านครั้งนี้ต้องเขียนไฟล์ README กำกับไว้ด้วย โดยให้เขียนดังนี้ (ให้ไม่มีไฟล์ README จะได้ 0 คะแนนทันที)
- เขียนว่า Service จะดับรอสีอะไร เพื่อแสดง notification
- ในกรณีโปรแกรมทำงานไม่สมบูรณ์ให้เขียนบอกด้วยว่าทำอะไรได้บ้างและทำอะไรไม่ได้
- หากทำโปรแกรมได้สมบูรณ์ทุกอย่างก็ให้เขียนบอกไว้ใน README ด้วยว่าโปรแกรมทำงานได้สมบูรณ์ทุกอย่าง
ตัวอย่างในห้องเรียน
การเรียนการสอน
วัน | หัวข้อ | เอกสาร |
17 มิถุนายน 2555 | Introduction to Android | PDF (แก้ไข) |
24 มิถุนายน 2555 | Intents and IntentFilters | ใช้ slide ของครั้งแรก |
1 กรกฎาคม 2555 | ListView | ใช้ slide ของครั้งแรก |
8 กรกฎาคม 2555 | UI | |
15 กรกฎาคม 2555 | Building your own widgets | |
22 กรกฎาคม 2555 | Life cycle State instance data Persistent data |
|
28 กรกฎาคม 2555 | Database and CursorAdapter | |
5 สิงหาคม 2555 | Content Provider and Loader | |
12 สิงหาคม 2555 | Services | |
19 สิงหาคม 2555 | Threads | |
26 สิงหาคม 2555 | RESTful applications | |
2 กันยายน 2555 | Google Cloud Messaging | |
9 กันยายน 2555 | Fragments | |
16 กันยายน 2555 | RoboGuice: Google Guice on Android | |
23 กันยายน 2555 | Testing |