จากที่เคยเขียนบล็อกเรื่อง Core Data ทั้ง 2 ตอน (Application Layout, Development Phase) เท่าที่ลองอ่านแล้วตั้งคำถามกับตัวเองแบบคนไม่รู้ก็ได้คำถามที่ว่าทำไมต้องใช้อันนั้น ไม่ใช้ได้ไหม หรือแล้วไอ้นี่มันมีประโยชน์อะไร มีหลายข้อเหมือนกัน สุดท้ายก็เลยคิดว่าคนที่อ่านก็น่าจะคิดและเจอปัญหาแบบเดียวกัน จากเดิมที่เปลี่ยนให้บล็อกมีแค่ 2 ตอนจบ เลยกลับมาเป็นแบบเดิมที่ตั้งใจไว้ว่าน่าจะมีตอนสรุปจบตอนที่ 3 ด้วย ซึ่งตอนนี้ก็อย่างที่ได้เกริ่นไปแล้วว่าคงจะเป็นเหมือน faq ของวิธีการพัฒนาที่ผมเขียนไปแล้วครับ
Category Archives: Projects
Google Maps + Geocoder Services: Part II
จากตอนแรก ได้อธิบายถึงการทำงานของโค้ดและได้สร้างรายการการแก้ไขไปแล้วบางส่วน โดยมีรายการของงานที่ต้องทำคือ
- ประกาศตัวแปร
maps,markerและlatlngเป็นตัวแปรแบบ global - ลบการประกาศตัวแปร
infoและการแมพเหตุการณ์ ‘click‘ ในฟังก์ชั่นinitWithMapStartและลบฟังก์ชั่นerrorOccur - แก้ไข callback function ของ
navigator.geolocation.getCurrentPosition - แก้ไขฟังก์ชั่น
panToCurrentLocation - เพิ่มฟังก์ชั่น
resolveGeocoding,displayGeocodingResult
โดยที่ 3 ข้อแรกนั้นได้แก้ไขไปแล้วเรียบร้อยใน Part I ในตอนนี้จะเป็นตอนสุดท้ายที่ถือได้ว่าเป็นหัวใจของเรื่องนี้ นั่นก็คือการส่งค่าพิกัดให้กับ Google และนำค่าที่ได้มาแสดงผลผ่าน InfoWindow จึงถือเป็นการสิ้นสุดการทำงานที่ได้วางไว้ข้างต้น
เริ่มส่วนที่เหลือกันเลยดีกว่า
Continue reading
Google Maps + Geocoder Services: Part I
จากบล็อกทั้ง 2 ตอนก่อนหน้านี้ (แนะนำการใช้งาน Google Maps V3 และ การใช้ Google Maps ร่วมกับความสามารถของ HTML5) ที่แนะนำการนำเอาแผนที่ของ Google Maps เข้ามาใช้ในเว็บไซต์และการหาตำแหน่งผู้ใช้โดยอาศัยความสามารถใหม่ที่เพิ่มเข้ามาใน HTML5 ซึ่งเว็บไซต์ส่วนใหญ่รองรับความสามารถนี้แล้ว
หลังจากพบตำแหน่งผู้ใช้เรียบร้อยแล้ว นักพัฒนาคงได้แค่เพียงแต่แหน่งพิกัดเท่านั้นซึ่งนั่นค่อนข้างยากหากต้องการพัฒนาแอพพลิเคชั่นที่จะส่งข้อมูลที่เกี่ยวข้องกับผู้ใช้ (หรือคิดว่าน่าจะมีประโยชน์กับผู้ใช้) โดยอาศัยตำแหน่งของผู้ใช้เป็นสำคัญ ดังนั้นที่เราต้องการหลังจากได้พิกัดตำแหน่งของผู้ใช้มาเรียบร้อยแล้ว ก็คงต้องสร้างฐานข้อมูลขนาดใหญ่ที่เก็บพิกัดตำแหน่งต่างๆ แล้วเชื่อมโยงไม่ยังชื่อสถานที่ที่ต้องการ ในกรุงเทพหรือต่างจังหวัดและขยายไปทั้งประเทศ
Continue reading
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