ไม่โปรโมตไม่ได้แล้ว Super Kute

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

จากนี้เป็นข้อความที่คนโพสเขียนไว้นะครับ

ชื่อวง Super kute แปลว่า “โคตรน่ารัก” บอยแบนด์ของเขมร นี่น่ารักสุดๆแล้ว??? – -”

คนซ้ายภาพล่าง ถ้าพี่แกไม่มีหูนี่เหมือนปลาไหลเลย -*-
2คน ทั้งด้านซ้ายและขวายืนประกบ เน้นคนกลางให้เด่น

อันนี้เป็น Comment

BY Mirindaman :

ถ้าเล่นดนตรีเป็นวงแต่ แต่งตัวแบบนี้ ไม่ผิดหรอก แต่ถ้าบอยแบนนนะ

แนะนำ

เปลี่ยนจากบอยแบน เป็น หน้าแบน โอเคก่านะ

…เป็นอย่างไรกันบ้างครับ ดนตรีของประเทศเพื่อนบ้านเรา น่าสนใจมั้ยครับ หุหุ …

Add comment กรกฎาคม 7, 2009

iPhone Train Center

ตอนนี้เห็นหลายๆคนถามผมว่า “รับ Train เขียน App บน iPhone มั้ยครับ” ซึ่งถ้าเป็นเมื่อก่อน(ที่ยังไม่ได้ทำงานประจำ)ก็คงจะรับ Train อยู่ แต่ตอนนี้ทำงานประจำแล้ว ก็คงต้อง “จำใจไม่รับ Train นะครับ” ต้องขออภัยจริงๆ เอาเป็นว่าผมเองก็คงช่วยได้จากการเขียนโพสเป็นหัวข้อใน Blog นี่ละกันนะครับ มีปัญหาอะไรก็โพสเข้ามาถามกัน จะพยายามช่วยหาคำตอบมาให้นะครับ อ้อ ถามใน www.i-gee.co.cc นะครับ เวบนั้นผมอยากให้มันเป็นศูนย์รวม iPhone Dev จริงๆ(ส่วนเรื่อง url ไว้จะเปลี่ยนมันทีหลังนะครับ)

จากหัวข้อเรื่อง ก็คือตอนนี้ถึงผมจะไม่ได้รับ Train iPhone Programming แต่ตอนนี้ก็มีที่ที่รับ Train นะครับ คือที่ทรู ตอนนี้เริ่มเปิด Training สำหรับผู้สนใจพัฒนา App บน iPhone แล้วนะครับ รายละเอียดดูได้ที่ http://www.trueappcenter.com/ โดยสิ่งที่ต้องมีคือ Mac (จริงหรือเถื่อนก็ได้ครับ) กับความรู้เรื่อง Objective-C สำหรับคนที่อยากได้ Training Course ถ้าสนใจก็ลองติดต่อไปทางทรูได้ครับ

ส่วนใครอยากศึกษากับผมก็ Train กันผ่าน Blog ก็แล้วกันนะครับ :P

Add comment มิถุนายน 24, 2009

Book Review : อัจฉริยะสร้างสุข

ออกมาอีกแล้วสำหรับหนังสือซีรี่ส์ “อัจฉริยะ” ของคุณ “หนูดี วนิษา เรซ” โดยคราวนี้โฟกัสกันด้วยเรื่องของ “ความสุข” โดยเนื้อหาก็จะแนวเหมือนๆกับเล่มก่อนๆ ที่ออกเป็น ทฤษฎีที่อ่านแล้วเข้าใจได้ง่ายๆ เกี่ยวกับกลไกของสมอง ตามด้วยเรื่องราวเกี่ยวกับความสุขในรูปแบบต่างๆ บอกเล่าผ่านประสบการณ์ของคุณหนูดี ที่ำได้จากการเรียนที่มหาลัย ฮาร์วาร์ด กับอาจารย์ผู้มีชื่อเสียงหลายๆคน

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

จากที่ผมอ่านแล้ว หนังสือเล่มนี้เชื่อมโยงกับหนังสือหลายๆเล่มที่ผมเคยอ่าน อย่างเช่น The Secret, เข็มทิศชีวิต 2 หรือแม้แต่เล่มที่ยังไม่ได้อ่านอย่าง “วิชาสุดท้ายที่มหาวิทยาลัยไม่ได้สอน 2″ ผมมองว่ามันคือเี้รื่องเดียวกันเลยนะครับ ต่างกันในแง่ของการอธิบายเท่านั้นเอง

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

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

Spoil : The Secret เหมือนกันตรงเรื่องของการกล่าวขอบคุณกับสิ่งรอบๆตัว ส่วน เข็มทิศชีวิต 2 เหมือนกันตรงเรื่องการเรียนรู้ความทุกข์ เหตุการณ์ที่เกิดขึ้นเกิดเพื่อให้เราเรียนรู้ (เหมือนเป๊ะเลย ไม่รู้คุณหนูดีอ่านเหมือนกันรึเปล่า)

Add comment มิถุนายน 9, 2009

ดูหนังบนไฟล์ .nrg Disk Image

เคยไหม กับการดาวน์โหลดหนังมาอย่างยาวนาน แต่ไฟล์ที่ได้กลับเป็นไฟล์ Image ซะอย่างงั้น ไฟล์ Image ที่ว่าหมายถึงไฟล์ที่ใช้สำหรับโปรแกรมไรท์แผ่นนะครับ ไม่ใช่ไฟล์รูปภาพ ถ้าเราไม่มีแผ่นเปล่าหล่ะ หรือไม่อยากไรท์หล่ะ หรือใช้ OS อื่นที่เปิด Format นั่นมันไม่มีโปรแกรมเปิดหล่ะ หรือเรายังอยากจะปล่อยไฟล์นั้นไว้สำหรับ Seed ใน Bittorent หล่ะ เหตุผลร้อยแปดที่เราอยากจะดูหนังจาก Disk Image ซะให้ได้

ไฟล์ Disk Image จะมีอยู่หลายนามสกุลครับ แต่ที่เจอบ่อยจะเป็น .iso, .nrg หรือนามสกุลอื่นๆ (นึกไม่ออกแล้ว) วิธีการมีง่ายๆครับ ถ้าใช้งานบนวินโดวส์ ก็ใช้โปรแกรม Daemon Tool สร้างไดรฟ์ CD จำลองแล้วแล้ว Mount ข้อมูลจาก File disk image ก็เป็นอันโอเคแล้ว

แต่ผมดันใช้แมคน่ะซิครับ แต่ไม่เป็นปัญหา ผมมีวิธีง่ายกว่านั้นอีก คือ ถ้าไฟล์ฟอร์แมตเป็น .nrg ก็ใช้วิธีการ เปลี่ยนนามสกุลมันซะ ให้เป็น .iso จากนั้นเปิดด้วยโปรแกรม VLC ทั้งแบบที่เป็น .iso นั้นซะเลย VLC ก็สามารถหาโหลดได้ฟรีครับ บนวินโดวส์หรือ Linux ก็คิดว่าทำได้เช่นเดียวกัน เพราะ VLC มีทั้ง 3 Platform ครับ

* Update : ไม่ต้องแปลงนามสกุลก็ได้ เปิดทั้งเป็น .nrg เลยก็ได้ วู้ว สุโค่ย

Add comment พฤษภาคม 11, 2009

การเปลี่ยนแปลง – บอย Peacemaker

ไม่ได้โพสอะไรบันเทิงๆที่นี่มานานแล้ว ต่อจากนี้ก็คงจะเป็นบันเทิงๆซะมากแล้วสำหรับที่นี่ เพราะส่วนของ Programming ย้ายไปอีกที่นึงแล้วนะครับ

วันนี้มี MV ตัวใหม่ของพี่ Boy Peacemaker MV ตัวนี้เป็นอะไรที่ดีมากทั้งเนื้อหาและตัว MV เพิ่งออกมาได้ไม่กี่วันเอง(มั้ง) เพลงนี้เป็นเพลงเกี่ยวกับมุมมองความรัก ที่บอกว่าความรักที่แท้จริงคือการเป็นผู้ให้ ไม่ใช่เป็นผู้รับ ประมาณว่า “ยิ่งให้ยิ่งได้รับ” นั่นแหละครับ มันก็เป็นเรื่องจริงของยุคสมัยนี้นั่นแหละครับ การได้เป็นผู้ให้มีความสุขการเป็นผู้รับจริงๆ ถ้าสังคมเราเป็นสังคมที่มีแต่การให้(อย่างจริงใจ) มันคงจะน่าอยู่กว่านี้เยอะเลย

ไม่อยากเขียนให้ยาวกว่านี้ครับ จะกลายเป็นซีเรียสซะเปล่าๆ เอาเป็นว่าดู MV นี้แล้ว ลองเริ่มการเป็นผู้ให้กันดีกว่าครับ แล้วจะพบว่าความสุขของการให้มันเป็นยังไง

Add comment เมษายน 25, 2009

ย้ายบ้านแล้วครับ

ตอนนี้เนื้อหาของ iPhone Development ผมย้ายไปเขียนที่ http://www.i-gee.co.cc แล้วนะครับ สำหรับคนที่สนใจเกี่ยวกับการเขียนโปรแกรมบน iPhone ที่เคยอ่านจากที่นี่ก็ตามไปอ่านกันได้นะครับ

เนื้อหาเกี่ยวกับ Cocoa Development ผมก็จะย้ายตามไปทีหลังนะครับ รวมถึงในเวบใหม่นี้ ผมจะพยายาม Tips หรือสิ่งที่น่าสนใจเกี่ยวกับการใช้เครื่อง Mac หรือ iPhone มาเขียนเพิ่มเติมกันด้วย

ส่วน Blog นี้ก็จะมีสถานภาพเป็นเวบส่วนตัวของผมเช่นเคยครับ โพส MV หรือ พูดเรื่องสัพเพเหระ ไปเหมือนเมื่อก่อน คงยังไม่ปิดนะครับ

ขอฝากเวบใหม่ไว้ด้วยนะครับ ชื่ออาจจะแปลกๆ (เพราะยังไม่รู้จะชื่ออะไรดี) ตั้งใจว่าจะจดเป็น .com อยู่แล้ว แต่ตอนนี้ยังคิดชื่อไม่ออก ก็เอาชื่อนี้ไปพลางๆก่อนแล้วกันครับ

Add comment เมษายน 4, 2009

iPhone Development – View, Drawing

สำหรับ Entry นี้อาจจะพูดถึงส่วนของ View ใน iPhone นะครับ ซึ่งอยู่ใน Lecture ที่ 5 ของ stanford course ซึ่งจะกล่าวถึงคลาส UIView ของ iPhone, การใช้เครื่องมือสำหรับการวาดอย่างง่ายครับ

ไม่แน่ใจว่ามันจะก้าวกระโดดไปนิดรึเปล่า เอาเป็นว่า Entry นี้ผมจะหลักเลี่ยงการโค้ดนะครับ เริ่มกันที่ View นะครับ

ส่วนที่เป็น View คือส่วนที่เป็นสี่เหลี่ยมผืนผ้าตรงหน้าจอนั่นแหละครับ ทั้งหมดเลย ซึ่งภายใน View จะมีการทำงาน 2 อย่างอยู่ด้วยกัน คือ ส่วนของ Content และ Event

Content ก็คือตัวอักษร, รูปภาพหรือสิ่งที่ถูกวาดขึ้นบนจอภาพนั่นเองครับ ใน View แต่ละหน้าจะมี View หลักตัวหนึ่ง(เทียบตาม Tree ก็เป็น Root) เราเรียกว่า Superview ครับ ภายใน Superview ก็จะมี View ย่อยๆ เรียกว่า Subview ถ้านึกไม่ออกว่าเป็นไง ก็ลองนึกถึงกระดานปักหมุด(Superview)ที่มีกระดาษ(subview)แปะอยู่แล้วกันครับ ส่วน Event คือเหตุการณ์ที่เกิดขึ้นบนหน้าจอนั่นเองครับ ไม่ว่าจะเป็นการ Tab, การ Scroll ฯลฯ ทั้งหมดที่จะสั่งการให้ iPhone ทำงานได้ ถือเป็น Event หมด

เนื่องจาก View เป็นการวาดรูปภาพขึ้นมาบนส่วนของ Content ดังนั้นโครงสร้างต่างๆที่เกี่ยวข้องกับ View ก็เป็นเกี่ยวกับการวาดเช่นกัน ได้แก่ CGPoint หมายถึง ตำแหน่งที่อยู่(x,y) ,CGSize หมายถึง ขนาด(Width, Height) และ CGRect หมายถึงกรอบ(CGPoint, CGSize) ลักษณะ Coordinate ของ iPhone จะไม่เหมือนกับพิกัดการวาดรูปทั่วๆไปครับ จุด origin จะอยู่ที่มุมซ้ายบน (จากปกติมักจะอยู่ซ้ายล่าง)

เกี่ยวกับการวาดนั้น การอ้างอิงพิกัดหรือพ้ืนที่สำหรับวาด จะมีอยู่ 2 แบบ คืออ้างอิงจาก Frame และอ้างอิงจาก Bound ทั้งสองแบบแตกต่างกันตรงที่ “มันเป็นตำแหน่งเมื่อเทียบกับขอบกระดานปักหมุกหรือเทียบกับขอบกระดาษที่แปะ” ถ้า Frame คือเมื่อเทียบกับขอบกระดานปักหมุด แต่ถ้า Bound ก็เทียบกับกระดาษบนกระดานปักหมุด ถ้ายังไม่เข้าใจลองดูที่สไลด์ที่ 19 ก็อธิบายได้ชัดเจนดีครับ มีคำแนะนำอยู่นิดหน่อย (อยู่ในสไลด์ที่ 20) เกี่ยวกับการใช้งาน Frame และ Bound

สิ่งที่อยู่เหนือกว่า Superview คือ Window แต่ละ App จะมี 1 Window และ Window มักจะถูกจัดการมาให้เราใน template เรียบร้อยแล้ว

ส่วนเรื่องของการโค้ด มีตัวอย่างอยู่ใน สไลด์ที่ 25-27 นะครับ ไม่ขอเอามาเขียนซ้ำนะครับ แล้วก็คิดว่าโค้ดไม่น่าจะยากอะไรด้วย แต่ถ้าสงสัยก็โพสถามเอาละกันนะครับ

ต่อไปเรื่องของการ Drawing ครับ

การ Drawing ลงไปบน Content View นั่น จะทำโดยการ override คำสั่งการวาดไปในฟังก์ชั่น Drawrect ครับ แต่การสั่งให้ Draw จะไม่ได้ใช้วิธีการเรียกฟังก์ชั่น Drawrect ครับ แต่จะใช้คำสั่ง setNeedDisplay แทน งงมั้ยครับ? ลักษณะนี้เรียกว่า “Lazy Loading” ครับ view ของเราจะไม่ถูกวาดอยู่ตลอดเวลา แต่วาด(ตามที่สั่งใน drawRect)แค่เฉพาะตอนที่สั่ง(ว่า setNeedDisplay)เท่านั้น

เครื่องมือเกี่ยวกับการวาด จะเป็น Core Graphics และ Quartz 2D ทั้งสองตัวที่กล่าวถึงเป็น Graphic Library บน Cocoa ครับ ใช้โดย Library นี้เป็น C-Base API นะครับ ไม่ใช่ Objective-C ส่วนวิธีการวาดอย่างละเอียดนั้น คงไม่ขอพูดถึงในที่นี้ เพราะจะยาวจนเกินไปครับ(รวมทั้งอยากหลีกเลี่ยงการ Coding ใน Entry นี้ไปก่อนด้วย) คงจะมาอัพเดตในคราวหน้า แต่ถ้าสนใจก็ดูในสไลด์ก่อนก็ได้ครับ ใน Entry นี้ไว้เท่านี้ก่อนครับ

Add comment มีนาคม 23, 2009

Objective – C Custom Class

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

จากก่อนหน้านี้ ผมอธิบายคร่าวๆเกี่ยวกับสิ่งต่างๆที่ต้องรู้ และในหัวข้อ Objective-C ก็อธิบายไว้คร่าวๆเหมือนกัน Entry นี้จะมาเจาะลึกกันซักหน่อย โดยจะเริ่มกันที่เรื่องของ Custom Class ของ Objective-C

ในการสร้าง Custom Class ใน Objective-C ไฟล์ที่ได้จากการสร้าง New Class จะมี 2 ไฟล์ คือไฟล์ .h และ .m
- ไฟล์ .h จะเป็น Header ไฟล์ ที่กำหนดลักษณะทั้งหมดของคลาส ว่า Class Name ชื่ออะไร มี Attribute และ Method อะไรบ้าง นอกจากนั้นยังเป็นส่วนที่กำหนดการเชื่อมต่อกับ Interface Builder ด้วย ลักษณะก็จะเป็นแบบนี้

#import <Foundation/Foundation.h>  // import เหมือนกับคำสั่ง include ของ C/C++

@interface ClassName : NSObject {
// Attribute ของ Class : เขียนเหมือนภาษา C ครับ
// Syntax: datatype varName
id  attr1;
NSString *attr2;

}
// Methods Header : คล้ายๆกับภาษา C เหมือนกันครับ ต่างกันนิดหน่อย
// Syntax: -/+ (returnDatatype)MethodName:(ParameterDatatype)parameterName;
- (void)setAttr2:(NSString *)aValue;
- (Nsstring *)attr2;

@end

- ไฟล์ .m เป็นส่วนของการ Implement Method ของคลาสทั้งหมด ลักษณะก็ประมาณนี้

#import “headerFile.h”

@implementation ClassName

- (void)setAttr2:(NSString *)aValue {
attr2 = aValue;
}

- (NSString *)attr2 {
return attr2;
}

@end

ครับ จากตัวอย่างเป็นการสร้าง Class ที่มี Method Getter กับ Setter นะครับ ต่อไปก็จะเป็นการสร้าง Object, Memory Management และการ ลบ Object นะครับ เริ่มต้นที่การสร้าง Object

การสร้าง Object มีสองขั้นตอนคือ การจองพื้นที่ และ การกำหนดค่าตั้งต้นของ Object ซึ่งรูปแบบมีดังนี้

ObjectClass *ObjectName = [[ObjectClass alloc] init];

การกำหนดค่าตั้งต้นอาจจะมี Parameter อื่นๆได้ด้วย ในกรณีตัวอย่างหมายถึง Default การกำหนดนี้ จะเกี่ยวข้องกับ Memory Management ตรงที่ Object ที่ถูกประกาศ จะมี retain count เป็น 1 หมายความว่า ตราบใดก็ตามที่ Object ตัวนี้ยังมีค่า retain count เป็น 1 หมายความว่า object ตัวนี้จะยังคงอยู่ในหน่วยความจำไปเรื่อยๆ ถ้าเราต้องการลบ Object ตัวนี้เราก็ทำได้โดยการใช้คำสั่ง Release แบบนี้ครับ

[ObjectName release];

ซึ่งจากข้างต้น ให้พูดง่ายๆก็คือ malloc กับ free ในภาษา C นั่นแหละครับ

แล้วก็อย่างที่บอกก่อนหน้านี้ครับ หลังจาก Mac OS X ออกมาเป็นเวอร์ชั่น 10.5 Leopard สิ่งที่คลานตามออกมาด้วยกัน คือ Objective-C 2.0 หลักๆก็มีสามอย่างอย่างที่เคยบอกนะครับ แต่Entry นี้จะเน้นเรื่อง Property แค่เรื่องเดียว เพราะเป็นเรื่องสำคัญใน iPhone Development เลยทีเดียว

Property เป็นสิ่งที่เข้ามาช่วยกำหนดคุณลักษณะของ Attribute ของ Class ของเราครับ ว่ามันอยู่ในหน่วยความจำอย่างไร Access ค่าแบบไหน ถามว่ามันจะรู้ไปทำไมว่าอยู่ในหน่วยความจำอย่างไร (retain, assign, copy) ก็เพราะฟีเจอร์เกี่ยวกับ Garbage Collector ส่วนเรื่อง Access ค่าอย่างไร (readwrite, readonly) ก็เป็นเรื่องที่เกี่ยวกับการใช้งานฟีเจอร์สร้าง Method Getter/Setter อัตโนมัติของ Property เอง (มันจะสร้างแบบไหนก็เกี่ยวกับมันอยู่ในหน่วยความจำอย่างไรเช่นกัน)

ส่วนว่าแต่ละอย่างมันหมายความว่ายังไงบ้าง ก็หมายความอย่างนี้ครับ

retain – Attribute นั้นถูกประกาศขึ้นโดย retain Count เป็น 1 Value เป็น default

assign – Attribute นั้นเป็น Pointer ชี้ไปที่ Attribute อื่นอีกทีนึง

copy – Attribute นั้น Access ค่าโดยการ Copy ค่ามาจากที่อื่น แต่ไม่ได้เพิ่ม retain count ขึ้นมาด้วย

readonly, readwrite – เป็นตัวกำหนดการ Access Attribute ว่าให้อ่านอย่างเดียวหรือเขียนได้ด้วย

ซึ่งตัวอย่างการใช้งานก็จะเปลี่ยนจากตัวอย่างด้านบนมาเป็นลักษณะนี้ครับ

ไฟล์ Header

#import <Foundation/Foundation.h>

@interface ClassName : NSObject {
id  attr1;
NSString *attr2;
}
@property id attr1;
@property Nsstring *attr2;

@end

ไฟล์ Implement

#import “headerFile.h”

@implementation ClassName

@synthesis attr1;
@synthesis attr2;

@end

จะเห็นว่า Method Getter/Setter หายไปและแทนที่ด้วยการกำหนด property แทน และในส่วนของ implement ก็แค่ใช้คำสั่ง @synthesis <#attribute> เพื่อให้มันสร้าง Method Getter และ Setter ขึ้นมา สั้นและง่ายขึ้นเยอะเลยใช่มั้ยครับ

ส่วนเรื่องการใช้งาน จะใช้ dot syntax เข้ามาแทนการเข้าถึง attribute ที่กำหนด property ครับ ลักษณะก็เป็นแบบนี้ (ใช้ class จากตัวอย่างข้างต้น)

objectExample.attr2 = @”test String”;  // อันนี้เป็นกรณี Setter method

NSLog(@”%@”, objectExample.attr2);  // อันนี้เป็นกรณีของ Getter method

ไม่ยากเกินไปใช่มั้ยครับ เกี่ยวกับเรื่องของ Custom Class ใน Objective-C สำหรับเนื้อหา Entry นี้อ้างอิง CS193P : Chapter 3 Custom Class นะครับ อยากดูสไลด์ก็ไปดูได้ (แต่ผมไม่ได้ทำหรอกนะ) เข้าใจไม่เข้าใจยังไงก็ติชมได้ครับ สำหรับบทนี้ขอจบเท่านี้ครับ

2 comments มีนาคม 6, 2009

Link Update

อยู่ๆผมก็ฉุกคิดเรื่องเวบลิงค์ขึ้นมาได้ ไม่ได้อัพเดตมานานขนาดไหนแล้วก็ไม่รู้ 

ลิงค์ใน Blogroll ของผมส่วนมากที่ขึ้นอยู่จะเป็นของเพื่อนๆพี่ๆนะครับ แต่ละคนก็เชี่ยวชาญคอมพิวเตอร์และการโปรแกรมในด้านอื่นๆต่างๆกันไป ซึ่งตอนนี้เพื่อนๆพี่ๆก็ยังคงอัพเดตเรื่องต่างๆทีมีประโยชน์กันอยู่

ส่วนที่เพิ่ม Category ขึ้นมาก็เป็นเรื่องของ Mac & iPhone App Dev เดี๋ยวนี้เวบที่เขียนเรื่องพวกนี้เจ๋งๆมีอยู่เยอะแยะ และตอนนี้ก็รู้สึกว่า เวบนี้เนื้อหาเริ่มจะกลายเป็น iPhone App Dev มากขึ้นๆ ก็เลยเอาให้มันสุดๆไปเลยดีกว่า (จากเมื่อก่อนที่มีแต่เพลงกับหนังและอะไรจิปาถะไปซะมากมาย) 

ลิงค์ที่เอามาแปะก็เป็นแหล่งเรียนรู้ของผมอีกเช่นกัน สำหรับผู้ที่สนใจก็แนะนำให้ลองเข้าไปอ่านกันครับ มีประโยชน์มากจริงๆ

Add comment มีนาคม 1, 2009

Cocoa & iPhone Development : Objective – C

ขออภัยที่หายไปนาน เนื่องจากเดือนนี้ ง่วงอยู่กับการอ่านหนังสือ iPhone อยู่ (แถมได้ E-book มาอีกเล่ม) เร็วๆนี้คงได้มา Review กันหลายเรื่องแน่นอน (ขอบอกไว้ก่อนว่า เล่มที่อ่านอยู่เจ๋งเอาเรื่องเลยทีเดียว)

เนื่องจากกลัวว่าจะลืมกัน บวกกับกลับมาลับ Basic กันนิดหน่อย เลยเบรคเรื่องอ่านหนังสือมาเขียนบลอกนิดนึง เริ่มเลยละกัน

…อย่างที่สามในการพัฒนา iPhone Application คือ “ภาษา” นั่นเอง ปัจจุบันแม้ว่าจะใช้ภาษา Native อื่นๆในการพัฒนา App บน Mac ได้มากมาย ไม่ว่าจะเป็น Java (ได้นานแล้ว), Python, Ruby ฯลฯ แต่โดยหลักแล้ว ภาษาหลักที่ใช้ในการพัฒนา App บนแมค และโดยเฉพาะ iPhone มีแค่ภาษา Objective-C เท่านั้น

Objective-C เป็นภาษา C ที่ถูกเอามาพัฒนาให้รองรับแนวคิดแบบ Object-Oriented แท้ๆ ย้ำว่าแท้ เพราะไม่เหมือนภาษา C++ ที่เป็น Object-Oriented ไม่แท้ (C++ มีคุณสมบัติของ OOP ไม่ครบถ้วน อาจค้านความคิดของหลายๆคนนะครับ ว่ามันไม่แท้ได้ไง ถ้าให้แจงกันใน Entry นี้คงหลุดประเด็นเกินไป ดังนั้นจะไม่พูดถึงนะครับ) เพราะฉะนั้น ลักษณะโครงสร้างและ Syntax ของ Objective-C จึงเหมือนกับภาษา C ซะเป็นส่วนมาก สไตล์การเขียนจึงเป็นแบบ Sequence Programming รวมถึง Library ของภาษา C ก็นำมาใช้ได้เลย แบบไม่ต้องเปลี่ยนแปลงอะไร (ถ้าเป็น Standard Library) 

แต่สิ่งที่เพิ่มเข้ามา คือลักษณะ Syntax ที่แตกต่างในบางเรื่อง ที่เห็นหลักๆก็ส่วนเกี่ยวกับ Object และ Class การประกาศและการใช้งานคลาส ที่ไม่เหมือนกับของภาษา OOP แบบอื่นๆ ที่มีการใช้ “.” ในการแทน Method ที่เรียกใช้ แต่ Syntax ของ Obj-C จะใช้ “ปีกกา ( [] )” แทนการเรียกใช้ Method ของ Object ตัวอย่างเช่น

id testString = [NSString stringWithString:@"Test String"];

จากตัวอย่าง จะเห็นว่า NSString เรียกใช้ method “stringWithString” โดยมีค่่า Parameter เป็นข้อความว่า Test String แบบนี้เป็นต้น

จะเห็นว่า Syntax แบบนี้ค่อนข้างจะเรียบร้อยและอ่านเข้าใจง่ายกว่า Syntax แบบจุด มากกว่าเยอะ 

เรื่องของชนิดข้อมูล (Datatype) ก็เช่นกัน Obj-C มีชนิดข้อมูลทั้ง Static และ Dynamic ที่สำคัญคือ Datatype แบบ Dynamic เพราะเป็นองค์ประกอบสำคัญของหนึ่งในคุณสมบัติของ OOP ข้อที่ชื่อว่า “Polymorphism” (ซึ่ง C++ ไม่มี) ซึ่งตัวแปรแบบ Dynamic Datatype ของ Obj-C คือ Datatype ชนิดที่ชื่อว่า “id” ดังตัวอย่างข้างต้น จากตัวอย่างหมายความว่า “ถ้า Value ด้านหลัง เปลี่ยน Class เป็นชนิดอื่นที่ไม่ใช่ NSString ตัวแปร testString ก็เป็น Object ของ class นั้นได้โดยไม่ต้องเปลี่ยนชนิดข้อมูล” DataType ชนิดนี้ ต่อไปเราจะได้เห็นกันบ่อยๆครับ

การจัดการ Memory ใน Obj-C ก็เป็นเรื่องสำคัญ ลักษณะของการจัดการ Memory ของ Obj-C คือการ Retain Count ขอยกตัวอย่างจากในหนังสือของ Aaron ละกันนะครับ ว่ามันเหมือนกับเราจูงหมาน่ะครับ ถ้าหมาของเรามีเชือกจูงอยู่ 2 เส้น ก็เหมือนกับตัวแปรตัวนั้นถูกเชื่อมการทำงานอยู่กับ 2 component  ตัวแปรนั้นก็จะยังไม่ถูกคืนความจำ และเมื่อใดที่คนจูงทั้งสองคนปล่อยเชือกจูง หมาก็มีอิสระ ก็เหมือนกับ Component ไม่มีการใช้งานตัวแปรนั้นแล้ว ก็จะทำการคืนหน่วยความจำให้เครื่องนั่นเอง

ข้างต้นเป็นสิ่งที่อยู่ใน Objective-C 1.0 นะครับ แต่หลังจาก Mac OSX Leopard ถูกปล่อยออกมา Objective-C ก็เพิ่ม Version ขึ้นมาด้วย เป็น 2.0 สิ่งที่เพิ่มขึ้นมาก็มีอยู่ 3 อย่างใหญ่ๆ (ที่จริงเคยเขียนไว้ในนี้แล้ว) 

1. Fast Enumerate เป็นการวนลูปใน Array แบบใหม่ ที่สั้นลง เร็วขึ้นง่ายขึ้น ลักษณะคล้ายๆกับการวนลูปในภาษา Ruby เจ๋งมากครับอันนี้
2. Garbage Collector เป็นระบบจัดการ Memory แบบใน Java ชาว Cocoa ก็ได้เฮ แต่ Cocoa Touch คงต้องจ๋อยกันไป เพราะ iPhone ไม่ Support Garbage Collector ครับ
3. Property List ลักษณะของการกำหนดคุณลักษณะของ Attribute ของ Object แบบใหม่ ที่ช่วยให้เรากำหนดคุณลักษณะและค่าของตัวแปร  ได้ง่ายขึ้นด้วยโค้ดที่สั้นลง แต่อันนี้ดีอย่างเสียอย่างครับ ข้อดีคือโค้ดสั้นลงเยอะเหมือนกัน แต่ข้อเสียคือ เราต้องกลับไปใช้ Syntax แบบจุดกัน อันไหนใช้จุดอันไหนใช้ปีกกา มือใหม่ได้งงกันน่าดูหล่ะครับ ซึ่งข้อนี้ ต่อไปจะได้เจอกันเยอะเลย ส่วนเรื่องของ Property List ถ้าอยากรู้ตอนนี้เลยก็ลองเข้าไปอ่านของเวบ mac’feteria เอาก่อนได้เลย พี่เขาเขียนไว้ดีมากครับ

สิ่งที่แตกต่างระหว่าง C และ Obj-C ที่จะพูดถึงใน Entry นี้ ก็จะขอเขียนไว้เท่านี้ก่อน(เพราะยังนึกไม่ออก แหะๆ) รายละเอียดลึกๆอื่นๆคงได้เขียนเพิ่มตอนหลัง หรืออธิบายในบทถัดๆไป ในบทนี้ไว้เท่านี้ก่อนนะครับ ;)

5 comments กุมภาพันธ์ 27, 2009

Previous Posts


สัตว์เลี้ยง

ไปเห็นในเวบบอร์ดมา อยากลองเอามาแปะเล่นๆดูมั่ง ผ่านเข้ามาก็แวะกดให้อาหารมันเล่นๆให้หน่อยก็แล้วกันนะครับ อิอิ


ให้อาหารหน่อยครับ คลิกที่นี่

อยากมีสัตว์เลี้ยงมั่ง คลิกเลย

Reading book

Beginning iPhone Development: Exploring the iPhone SDK

ใช้หัวคิด

Post Calendar

กรกฎาคม 2009
พฤ อา
« มิ.ย.    
 12345
6789101112
13141516171819
20212223242526
2728293031  

New Coming Post

หมวดหมู่

Blogroll

Mac & iPhone Dev Useful Link

ป้ายกำกับ