จากที่เคยเขียนบล็อกเรื่อง Core Data ทั้ง 2 ตอน (Application Layout, Development Phase) เท่าที่ลองอ่านแล้วตั้งคำถามกับตัวเองแบบคนไม่รู้ก็ได้คำถามที่ว่าทำไมต้องใช้อันนั้น ไม่ใช้ได้ไหม หรือแล้วไอ้นี่มันมีประโยชน์อะไร มีหลายข้อเหมือนกัน สุดท้ายก็เลยคิดว่าคนที่อ่านก็น่าจะคิดและเจอปัญหาแบบเดียวกัน จากเดิมที่เปลี่ยนให้บล็อกมีแค่ 2 ตอนจบ เลยกลับมาเป็นแบบเดิมที่ตั้งใจไว้ว่าน่าจะมีตอนสรุปจบตอนที่ 3 ด้วย ซึ่งตอนนี้ก็อย่างที่ได้เกริ่นไปแล้วว่าคงจะเป็นเหมือน faq ของวิธีการพัฒนาที่ผมเขียนไปแล้วครับ
Tag Archives: Programming
Cocoa Style for Objective-C: Part I
สำหรับการเริ่มเขียนภาษา Objective-C หรือภาษาคอมพิวเตอร์อื่นๆ ไม่ว่าจะเป็น Java, C หรือ PHP สิ่งสำคัญอย่างหนึ่งนอกจากจะต้องเข้างใจกลไกการทำงานของภาษานั้นๆ แล้ว ก็จำเป็นต้องเข้าใจธรรมชาติของลักษณะการกำหนดชื่อคลาส เมธอด และตัวแปร นั่นนอกจากจะทำให้โค้ดที่เราเขียนขึ้นเองนั้นเป็นที่เข้าใจง่ายแล้ว ก็ยังทำให้เราเข้าใจโค้ดอื่นๆ ที่เราต้องการได้ เช่น เฟรมเวิร์คภายนอก สำหรับภาษา Objective-C เอง ทาง Apple ก็ได้วางแนวทางการสำหรับวิธีการเขียนโค้ดให้กับนักพัฒนาเพื่อให้โค้ดเข้าใจได้ง่ายมากที่สุด ซึ่งนอกจากที่เขียนไว้เป็นลายลักษณะอักษรแล้วก็ยังมีบางส่วนที่ไม่ได้กำหนดไว้ (แต่กลายเป็น de facto) บล็อกต่อไปในี้ก็เลยตั้งใจว่าจะนำเอาเรื่องพวกนี้มาอธิบายไว้ก่อน ก่อนที่เริ่มกับ Objective-C มากกว่านี้ โดยบล็อกจะแบ่งออกเป็น 2 ตอนด้วยกันซึ่งเนื้อหานี้จะเรียบเรียงมาจากบทความของ CocoaDevCentral 2 บทความ ได้แก่ Cocoa Style for Objective-C: Part I และ Cocoa Style for Objective-C: Part II โดยที่จะแบ่งเป็น 2 ส่วนคือ
-
Part I: การตั้งชื่อพื้นฐานของ Class, Variable, Accessor หรือ Method
-
Part II: รายละเอียดอื่นๆ สำหรับชื่อ Method, Global Symbols, Parameter และอื่นๆ
Core Data in Action: Development Phase
ตอนนี้จะพัฒนาแอพพลิเคชั่นต่อจาก Core Data in Action – Application Layout สำหรับผู้ที่เริ่มต้นอ่านที่นี่ ผมแนะนำและขอร้องให้อ่านตอนแรกก่อนครับเพราะนั่นจะทำให้เข้าใจการทำงานและเหตุผลต่างๆ ในการพัฒนาแอพพลิเคชั่นในตอนนี้ได้ดีมากยิ่งขึ้น ซึ่งตอนนี้จะเป็นการพัฒนาแอพพลเคชั่นเพื่อเรียกใช้งาน Core Data โดยที่บล็อกตอนนี้จะเน้นไปในส่วการอธิบายโค้ดเป็นหลัก ส่วนวิธีการหรืออัลกอริทึมต่างๆ จะขอยกไปอธิบายในตอนถัดไป
เร่ิมต้นด้วยการเลือกที่ไฟล์ FruitsAppDelegate.m แล้วเพิ่มบรรทัดด้านล่างเข้าไปเพื่อเอาไฟล์ FruitsViewController.h เข้าใช้งาน
// FruitsAppDelegate.m #import "FruitsAppDelegate.h" #import "FruitsViewController.h" ...
Core Data in Action: Application Layout
จากตอนที่แล้ว (Introduction to Persistent Data in iOS)ได้พูดถึงการใช้งาน plist เพื่อบันทึกข้อมูลต่างๆ ที่ผู้ใช้แก้ไขภายในแอพพลิเคชั่น ซึ่งการใช้ไฟล์ plist นั้นเหมาะกับข้อมูลไม่มาก เช่น รายการข้อมูลที่ผู้ใช้สามารถเปลี่ยนแปลงแก้ไขเองได้ ชื่อผู้ใช้ ในกรณีที่ข้อมูลมีขนาดใหญ่หรือต้องการนำเอามาประมวลผลอื่นๆ เช่น วาดกราฟ ทำรายงาน ส่งต่อไปยังผู้ใช้อื่น การใช้ plist ย่อมไม่เหมาะแน่ เพราะการอ่านเขียนไฟล์ขนาดใหญ่บนโทรศัพท์มือถือ นั่นไม่ใช่เรื่องที่ดีแน่นอน นั่นส่งผลให้เราต้องเปลี่ยนไปใช้ SQLite เพื่อเก็บข้อมูลการทำงานต่างๆ ซึ่ง SQLite เป็นการเก็บข้อมูลในรูปแบบของ Relational Database ซึ่งใน iOS มี SQLite APIs พร้อมใช้งานอยู่แล้ว ซึ่ง API จะอยู่ในรูปของ C Function หากสนใจอ่านต่อได้ที่ techotopic.com
Continue reading
Introduction to Persistent Data in iOS
การพัฒนาแอพพลิเคชั่นบน iOS Device, เครื่องคอมพิวเตอร์, หรือแพลตฟอร์มอื่นๆ เรื่องหนึ่งที่สำคัญมาก นั่นก็คือการเก็บข้อมูลต่างๆ ที่ผู้ใช้เคยกำหนดไว้แล้ว เช่น ข้อมูลการลงชื่อเข้าใช้งาน (สำหรับแอพพลิเคชั่น facebook บนมือถือ), การกำหนดกั้นหน้ากั้นหลัง (ในโปรแกรมประเภทประมวลผลคำ) หรือ ค่าต่างๆ ที่กำหนดให้ผู้ใช้อัตโนมัติเมื่อเริ่มทำงานเป็นครั้งแรก ซึ่งแต่ละแพลตฟอร์มการพัฒนานั้น ก็จะมีวิธีการเก็บค่าเหล่านี้ไว้ด้วยวิธีการที่ต่างกันออกไป แต่สามารถแบ่งได้เป็น 2 วิธีใหญ่ๆ คือ การบันทึกลงไฟล์แล้วใช้การเรียกคืนในลักษณะของคำสำคัญที่ชี้ไปยังค่าที่ต้องการนั้น (key-value) เช่น properties file ของ java ซึ่งข้อดีของวิธีการแบบนี้คือเข้าถึงได้สะดวกรวดเร็วในกรณีที่มีข้อมูลไม่มาก แต่ข้อเสียคือต้องบริหารจัดการคำสำคัญ (key) เหล่านั้นให้ดี เพราะมีโอกาสซ้ำกันได้
# Fruit.properties fruit.durain.name = Durain fruit.durain.price = 90.00 fruti.durain.fruitNote = Teasty fruit
สร้าง XML Binding Class ด้วย JAXB
สไลด์ยังอุ่นๆ อยู่เลยเพราะพึ่งออกจากเตาใหม่ๆ สไลด์นี้ว่าด้วยการสร้าง XML Binding Class ด้วย JAXB ใน Java เป็นตัวอย่างและสรุปสั้นๆ ให้พี่ที่ทำงานฟัง ถ้าต้องการรายละเอียดถามได้ครับ
Subversion in Actions II
คราวที่แล้วเขียนเกี่ยวกับการใช้ Subversion (svn) เบื่องต้น ได้แก่ การสร้าง Repository, เพิ่มไฟล์เข้าสู่ index ใน working copies (add), และส่งเข้าสู่ Repository (commit) ส่วนตอนนี้ก็จะขอพูดส่วนเกี่ยวกับคำสั่งต่างๆ ที่เอาไว้ติดตามความเคลื่อนไหว และการเปลี่ยนแปลงของ Repository ครับ
ข้อมูลประจำรุ่น (log)
เป็นข้อมูลประจำสำหรับรุ่นนั่น เช่น Revision ผู้ commit วันเวลา จำนวนบรรทัดที่เปลี่ยนแปลง และบันทึกประจำรุ่น มีรูปแบบตามนี้ครับ
REVISION_NO | USER_NAME | DATE_TIME | LINE_CHANGED MESSAGE_LOG
ตัวอย่างเช่น
$ svn log file:///Users/sitdh/Repository/helloSVNServer ------------------------------------------------------------------------ r2 | sitdh | 2009-09-10 00:40:52 +0700 (Thu, 10 Sep 2009) | 1 line Create Project ------------------------------------------------------------------------ r1 | sitdh | 2009-09-09 21:56:38 +0700 (Wed, 09 Sep 2009) | 1 line test ------------------------------------------------------------------------
คำอธิบาย:
- บรรทัดที่ 03 และ 07 คือ ข้อมูลประจำรุ่น
- บรรทัดที่ 05 และ 09 คือ คำอธิบายการเปลี่ยนแปลงที่ผู้ commit เขียนอธิบายไว้
หมายเหตุ: ข้อมูลดังกล่าวเป็นข้อมูลที่ได้จาก Repository เนื่องจากเราระบุพาธไว้ด้านหลัง หากให้คำสั่ง svn log จะเอา log ที่อยู่ใน Working Copies มาแสดงแทน ซึ่งข้อมูลที่ได้อาจไม่ตรงกับ Repository วิธีแก้คือใช้คำสั่ง update เพื่อปรับปรุงข้อมูลให้ตรงกัน (Synchonize – sync) ระหว่าง Working Copies และ Repository
$ svn update file:///User/sitdh/Repository/helloSVNServer At revision 3.
คำอธิบาย:
- บรรทัดที่ 01 ใช้คำสั่งเพื่อ sync ข้อมูล หามีข้อมูลที่ไม่ตรงกับ Repository จะแสดงรายการเปลี่ยนแปลงด้านล้าง
- บรรทัดที่ 02 เป็นบรรทัดที่บอก Revision ล่าสุดที่อยู่ใน Repository (HEAD Revision)
หาความแตกต่างระหว่างเวอร์ชั่น (diff)
ก่อนอื่นต้องทบทวนก่อนว่าในตัวอย่างของ blog ที่แล้วได้สร้างข้อมูลตัวอย่างและส่งเข้า Repository เรียบร้อยแล้ว (Revision 3 หรือ r3) จากนั้นได้แก้ไขข้อมูลในไฟล์ ‘index.php’ เล็กน้อย และ commit เข้าไปยัง Repository เรียบร้อยแล้ว (Revision 4 หรือ r4) ดังนั้นถ้าอยากรู้ว่าระหว่าง r3 และ r4 มีความแตกต่างตรงไหนบ้าง คำสั่งที่ช่วยได้ก็คือ diff ดังนี้
$ svn diff -r 3:4 Index: index.php =================================================================== --- index.php (revision 3) +++ index.php (revision 4) @@ -1,3 +1,4 @@ -hello, world\n"; + echo "
hope you like it
"; ?>
คำอธิบาย:
- บรรทัดที่ 02
Indexจะบอกว่าตอนนี้เปรียบเทียบไฟล์ไหนอยู่ - บรรทัดที่ 04 – 05 กำหนดเครื่องหมายสำหรับ
r3แทนด้วย ‘-’ และr4แทนด้วย ‘+’ โดย ใช้บอกว่าบรรทัดไหนหายไปจากr4(-) และเพิ่มเข้ามาในr4(+) ถ้าบรรทัดไหนไม่เปลี่ยนแปลงก็จะไม่มีเครื่องหมายนำหน้า - บรรทัดที่ 07 – 08 คือ บรรทัดที่มีอยู่ใน
r3แต่หายไปจากr4(เครื่องหมาย-นำหน้า) - บรรทัดที่ 09 – 11 คือ บรรทัดที่เพิ่มเข้ามาใน
r4 - บรรทัดที่ 12 เป็นบรรทัดที่ไม่เปลี่ยนแปลง