Tag Archives: iPhone

Talk: WWDC 2008

คือช่วงนี้หายหน้าหายตาไป เพราะว่าติดงานเลยไม่ค่อยได้เขียน blog เท่าไหร่ แต่ผมจะพยายามเขียน cocoa ให้มันเสร็จโดยเร็ว ( เนื้อหามันเยอะมากเลย ) เอาละ พูดถึง WWDC 2008 มันคืองาน World Wide Develop Conference ก็เป็นงานประชุมสัมนาของนักพัฒนา software ให้ักับ apple นั่นเหละ และงานที่จะถึงนี้งานมันคงเน้นไปที่ iPhone เป็นหลัก เพราะแน่นอนว่าเค้าจะออก Firmware version2 มาให้ได้ใช้แน่นอน และยังอาจจะมีการเปิดตัวของ iPhone 3G กันในงาน

งานนี้ผมเกือบได้ไปละ แต่ว่าก็ไม่ได้ไป เพราะช่วงที่บอสไปต่างประเ้ทศกับเพื่อนผม เค้าจะได้มี meeting กับ พวก apple engineer ผมเลยบอกว่า ช่วยขอบัตร ให้ด้วยได้ไหม บอสเค้าก็รับปาก แต่ผลกลายเป็นว่า ได้เจอกับ apple น่ันเหละ แต่ว่า กลายเป็นการกินข้าวเฉยๆ คือไม่ได้อะไรเท่าไหร่ เรื่องงาน WWDC ก็เลยไม่ได้พูดถึง ก็โอเคว่าไม่ได้บัตฟรี ผมก็คิดว่าจะไปขอบอสว่าอยากไป ซึ่งก็คิดว่าบอสก็คงจะให้ เพราะผมมีโปรเจคต้องเขียนโปรแกรมโปรแกรมให้กับ iPhone อยู่ด้วย แต่เนื่องจากว่า ความสำคัญของงานผมตอนนี้มันคือ mac ผมเลยลังเลใจ พอจะไปขอจริงๆ ก็กลายเป็นว่า บัตร WWDC มันขายหมดแล้ว โอ้วววว ไม่น่าเชื่อว่ามันจะขายหมด ( เค้าบอกว่าเป็นครั้งแรกเลยที่มันขายหมด ) และผมก็เชื่อว่า คนส่วนมากก็น่าจะเข้า iPhone Session เยอะแน่ๆเลย ก็น่าเสียดายเนอะ ที่ตัดสินใจช้าไปนิด ก็เอาไว้ปีหน้าก็แล้วกัน

iPhone Programming – Road map

บทความนี้นานแล้วครับไปอ่านที่ผมเขียนไว้ใหม่ดีกว่าครับ

http://www.macfeteria.com/blog/2011/06/06/ios-roadmap-again

 

ฉบับปรับปรุง 25 Sep 09

หลังจากที่คิดอยู่นานว่าจะเริ่มอย่างไรดีกับ iPhone SDK และผมคิดว่ามีหลายๆคนอยากจะเขียนโปรแกรมสำหรับ iPhone แต่ยังไม่รู้เลยว่า มันจะเขียนยังไง สำหรับบทความนี้ เป้าหมายหลักของผมคืออธิบายภาพรวมของการเขียนโปรแกรมบน iPhone ให้เข้าใจกันเบื้องต้นว่า ก่อนที่คุณจะเขียนโปรแกรมบน iPhone นั้นสิ่งที่ต้องรู้เบื้องต้นคืออะไร

Language

การเขียนโปรแกรมบน iPhone นั้นแบ่งภาษาที่ใช้ในการเขียนหลักๆเป็น 3 ภาษา ( จริงๆมีอีกภาษาคือ objective-c++)

  • Objective C
  • C
  • C#

ภาษาอื่นๆหมดสิทธ์ อาจจะมีภาษาอื่นในอนาคต อย่างกรณีภาษา C# ทาง Apple ไม่ได้สนับสนุนโดยตรงแต่เกิดขึ้นมาจาก Mono-Project ถ้าหากเขียน java หรือ Visual Basic มาก่อน ก็คงต้องเลือกเอาละครับว่า ต้องเรียนรู้ภาษาใดภาษาหนึ่งเพิ่มเติมแน่นอน

แนะนำข้อดีของแต่ละอันดีกว่าว่ามันมีดีต่างกันยังไง

ภาษา C

ข้อดีของภาษา C ที่ผมเห็นว่ามันดีที่สุดคือ  การหาหนังสือเกี่ยวกับการเขียนโปรแกรมภาษา C ง่ายมาก หนังสือภาษาไทยก็มี เดินเข้าร้านหนังสือก็เจอแล้ว ( แต่ไม่ค่อยมีหนังสือภาษาไทยที่ลงลึกการเขียนโปรแกรมด้วย C สักเท่าไหร่ ) และไม่ใช่แค่หนังสือแต่รวมไปถึง source code, library, tutorial และมี community ที่ใหญ่มาก และมันเป็นภาษาที่นิยมแพร่หลายและเก่าแก่ และในปัจจุบันก็ยังนิยมใช้อยู่

ข้อเสียที่ผมคิดว่ามันน่าจะเป็นเรื่องของ การเขียนโปรแกรมด้วยภาษา C ให้ได้ดีนั้นค่อนข้างยาก ไม่ใช่ว่าภาษามันไม่ดี แต่เป็นเพราะว่าตัวภาษามันค่อนข้างจะมีรายละเอียดปลีกย่อยเยอะ กว่าจะเก่งใช้เวลาเรียนรู้นาน แต่ด้วยความสามารถของตัวภาษา มันสามารถลงลึกถึงขั้นจัดการหน่วยความจำหรือแม้กระทั่งตัว hardware โดยตรงได้ และนี่ก็เป็นดาบสองคม เพราะถ้าเขียนโปรแกรมให้มันจัดการหน่วยความจำไม่ดี โปรแกรมเราก็ทำงานได้ประสิทธิภาพที่แย่มากๆ และหนำซ้ำอาจจะไปทำให้ระบบรวนอีก ( สำหรับภาษา java หรืออื่นๆนั้น แทบจะไม่ต้องไปทำเขียนอะไรเกี่ยวกับหน่วยความจำเลย เพราะมันมี Garbage collector เอาไว้จัดการหน่วยความจำให้เรียบร้อย )

จริงๆแล้วการเขียนโปรแกรมด้วย ภาษา C นั้นจำเป็นต้องเพิ่งภาษา  Objective-C อยู่ดีเพราะเราต้องอาศัย interface builder แต่อย่างที่ผมบอกไว้ว่า Library ของภาษา C นั้นมีเยอะมาก เราสามารถนำ Library ของภาษาที่มีอยู่แล้วนำมาใช้ร่วมกันกับ ภาษา Objective-C ได้อย่างไม่มีปัญหา

สำหรับโปรแกรมที่ใช้ภาษา C เป็นหลักก็จำพวก Game ครับ

ภาษา Objective-C

ข้อดีของมันคือ ภาษา objective-c มันค่อนข้างเรียนรู้ง่าย ไม่ซับซ้อน ( เค้าบอกว่ามันเป็นเหมือนภาษา C ผสมกับ smalltalk ) และมี Framework, Library ให้ใช้เยอะมาก ภาษามีความยืนหยุ่นสูง และเนื่องจากว่ามันเป็น small super set of C นั่นก็แปลว่า เราสามารถใช้ lib หรือ code ของ C ได้ ( ไม่ใช่ C++ น่ะ ) และตัวภาษายังอนุญาติให้เราเข้าไปจัดการหน่วยความจำได้เหมือนกัน แต่ก็ไม่ยืดหยุ่นมากเท่ากับ c และมันยังมี Garbage Collector ในกรณีที่ไม่ต้องการจัดการหน่วยความจำเอง (แต่ในกรณีของ iPhone Garbage Collector จะไม่สามารถใช้ได้) และข้อดีที่สุดคือ การเขียน application บน iPhone นั้น ถ้าเขียนด้วยภาษา objective-c คือมันมี interface builder ทำให้เราออกแบบ User Interface ได้อย่างง่ายดาย

ข้อเสียคือ หนังสือให้อ่านน้อยมาก *** ย้ำว่าน้อยมาก *** หนังสือภาษาไทยตอนนี้เท่าที่เห็นมีเล่มเดียวคือ iPhone Programming Cook Book และจำนวนแหล่งความรู้เพิ่มเติมของ Objective-C นี้ก็น้อยมาก ติดปัญหาก็ไม่รู้จะไปหาคำตอบได้ที่ไหน อย่างเวปของไทย ที่เกี่ยวกับ Objective-C ก็น้อยมากๆ เทียบกับ .net หรือ java ก็คนละเรื่องเลย ( บางคนอาจะไม่เคยได้ยินชื่อภาษา Objective-C มาก่อนด้วยซ้ำไป ) จากสิ่งนี้ทำให้ การหา source , tutorial นั้นยากตามไปด้วย ต้องหาคำตอบหรือความรู้เพิ่มจากเวปของต่างประเทศค่อนข้างเยอะ คนไม่เก่งภาษาอังกฤษ ก็ลำบากหน่อย

ภาษา C#

ในความคิดส่วนตัวของผมคิดว่า C# เป็นภาษาที่ควรจะพิจารณาเป็นลำดับสุดท้าย เพราะเนื่องด้วยว่า Apple ไม่ได้สนับสนุนโดยตรง และการเขียน iPhone ด้วย C# นั้นต้องการ IDE ของ mono-project ซึ่งต้องซื้อเพิ่มเติม ราคาก็บาทอยู่เหมือนกัน ที่สำคัญครับยังต้องเขียนบน mac และอาศัย iPhone SDK อยู่ดี เหมาะสำหรับ โปรแกรมที่มีอยู่แล้วใน platform อื่นที่เขียนเป็น C# อยู่แล้วมากกว่า ถ้าใครสนใจจริงๆ ก็ไปอ่านรายละเอียดเพิ่มเติมได้ที่่ http://monotouch.net/

ส่วนเรื่องอื่นๆในรายละเอียดของภาษาว่าแตกต่างกันอย่างไรในแบบลึกๆ ลองไปดูเพิ่มเติมได้ที่

http://en.wikipedia.org/wiki/Comparison_of_programming_languages

แล้วควรจะเลือกภาษาใด ?

จากประสบการณ์ของผมขอแนะนำให้ศึกษา ภาษา Objective-C เป็นภาษาหลักส่วนภาษาอื่นๆเป็นภาษารอง

Framework

apple ได้ออกแบบ Framework มาเป็น 2 อย่างคือ

  • Cocoa
  • Carbon

สองอย่างนี้ มันสามารถทำงานร่วมกันได้ในบางส่วน แต่โดยปกติแล้วจะแยกจากกัน สำหรับการเขียนโปรแกรมบน Mac นั้น ถ้าเขียนโปรแกรมด้วยภาษา objective-c นั้นเราจะใช้ Cocoa ส่วน C/C++ นั้นจะใช้ Carbon ดังนั้นถ้าหากเลือกได้ว่าจะเขียน ด้วยภาษาใดแล้วมันก็เหมือนเป็นการบังคับไปเลยว่า เราต้องใช้ Framework แบบไหน แต่ข้อดีของมันก็คือว่า ทั้ง Cocoa และ Carbon ออกแบบมาใกล้เคียงกันมาก ยกตัวอย่าง NSView ( เป็นคลาสหนึ่งใน Cocoa ) ในส่วนของ Carbon ก็จะมีคลาสที่คล้ายๆกันคือ HIView และมี method ที่คล้ายๆกันอีกต่างหาก ( แต่ concept การทำงานบางอย่างมันจะไม่เหมือนกันซะทีเดียว )

แต่สำหรับ iPhone แล้ว Apple ได้ออกแบบ Framwork ใหม่ที่มีชื่อว่า

  • Cocoa Touch

ซึ่งเป็น Framework ที่ออกแบบมาเหมือนกับ Cocoa แต่มีขนาดเล็กกว่า ฉนั้นแล้วการเขียนโปรแกรมด้วย iPhone นั้นก็ต้องใช้ Cocoa Touch ครับ เว้นแต่ว่าจะเขียนโปรแกรมจำพวก Game อาจจะไม่จำเป็นต้องศึกษาให้ลึกซึ้งมากนัก

Tools

เครื่องมือที่ใช้ในการเขียนโปรแกรมสำหรับ iPhone นั้นมีสองอย่างคือ XCode และ monotouch สำหรับ C# ในส่วนของ Development Tool  ของ Apple เองนั้นจะประกอบไปด้วยส่วนย่อยๆอีก หลายอัน เช่น Simulator , Instrument

Xcode นั้นเป็นโปรแกรมที่แถมมาฟรีกับ Mac OSX โดยปกติจะอยู่ในแผ่นที่แถมมาตอนซื้อเครื่องในแผ่นที่ 2 ถ้าไม่มีก็โหลดได้จากเวปของ apple แต่ต้องสมัครเป็นสมาชิก adc member ก่อน และในตอนนี้ XCode ก็ออกมาเป็น version 3.1 แล้ว ถ้าหากเป็น Snow Leopard ก็จะเป็น 3.2

Ready ?

หลังจากรู้คร่าวๆไปแล้ว ว่าการที่เราจะเขียนโปรแกรมบน iPhone นั้นมีขั้นตอน และต้องรู้อะไรมาบ้าง แน่นอนว่าบางคนอาจจะต้องเรียนรู้ทุกอย่างใหม่หมด ตั้งแต่ ภาษา เครื่องมือ ในการเขียนโปรแกรม แต่อย่าไปกลัว เมื่อก่อนผมเองก็ยังไม่เคยเขียนโปรแกรมบน mac มาก่อนเลย ก็ยังอ่านและทดลองเองหมด ฉนั้นไม่ยากเกินความสามารถแน่ๆ

สรุปว่า ถ้าอยากเขียนโปรแกรมบน iPhone สิ่งที่จะต้องรู้ก็คือ

  • ภาษา c หรือ objective-c หรือ C# ( แต่ผมไม่แนะนำ )
  • Cocoa Touch
  • XCode
  • Interface Builder

ครั้งหน้าเราจะมาเริ่มเขียนโปรแกรมกันครับ

Talk: iPhone SDK – II

ตอนแรกผมว่าจะเขียน iphone sdk ละ แต่คิดว่ามันยังไม่ถึงเวลาจะเขียน เพราะอีกตั้งหลายเดือนกว่าจะที่มันจะ update firmware และเราก็คงทำได้แค่ เขียนและลองใช้แต่เฉพาะ กับ emulator แต่ก็เท่าที่อ่านข่าวมาหลายอย่างก็พบว่า มันยังมีกฎต่างๆของ iphone ที่ห้ามไว้ เป็นต้นว่า ห้ามเขียนโปรแกรมที่เกี่ยวกับซิมการ์ด เป็นต้นและอื่นๆอีกมากมาย เท่าๆที่ผมอ่านๆมาเหมือนว่า Java ก็ไม่สามารถทำงานได้เพราะว่ามันเป็น interpreter ซึ่งก็เป็นข้อห้ามของ apple

และผมก็ได้อ่าน review จาก http://www.blognone.com/node/7210 ของคุณ MK ได้เขียนไว้แต่ผมไม่ค่อยเห็นด้วยน่ะ คือเท่าที่อ่านมา เค้าเข้าใจว่ามันเขียนได้เฉพาะ objc แต่จริงๆแล้วมันเขียนได้ด้วย c/c++ อีกภาษา และผมก็ไม่เห็นด้วยตรงที่เค้าบอกว่า

” ข้อดีคือเทคโนโลยีที่ใช้ใน iPhone เป็นเทคโนโลยีที่พิสูจน์แล้วว่าสมบูรณ์ มั่นคง แข็งแรง บั๊กน้อย (ภาษาอังกฤษเรียก mature) แถมประหยัดสตางค์ของแอปเปิลเอง เพราะจ้างนักพัฒนาเขียนไลบรารีครั้งเดียว ใช้ได้ทั้งบนคอมพิวเตอร์ และ iPhone (รวมถึง iPod touch ดังจะกล่าวต่อไป) นักพัฒนาที่คุ้นเคยกับแมคอยู่แล้วก็สบาย แทบไม่ต้องเรียนรู้อะไรใหม่ยกเว้น Cocoa Touch กับเทคโนโลยีเฉพาะของ iPhone อย่างอื่นอีกเล็กน้อยเท่านั้น

แต่ข้อเสียก็มาพร้อมกัน คือนักพัฒนาบนแมคที่ว่าเนี่ย มันมีอยู่สักกี่คนกันเชียว การเรียนรู้ชุดเครื่องมือเหล่านี้ต้องลงทุนสูงพอสมควร อย่างน้อยๆ ต้องซื้อเครื่องแมคมาใช้ ตามอัพเดตใช้ซอฟต์แวร์เวอร์ชันล่าสุดอยู่เสมอ (iPhone SDK รันได้เฉพาะบน Leopard 10.5.2 ขึ้นไป และฮาร์ดแวร์อินเทลเท่านั้น) แถมพัฒนาซอฟต์แวร์บนแพลตฟอร์มนี้แล้วก็รันได้แต่บนแมค ตลาดมีขนาดเล็กมากเมื่อเทียบกับพีซี ยิ่งในประเทศไทย จะหาคนที่พัฒนาซอฟต์แวร์บนแมคเพื่อเลี้ยงชีพนี่แทบนับนิ้วได้ “

จริงๆแล้วข้อดี คือเพราะมันแทบจะเหมือน Api ของ OSX นั่นไม่ใช่ว่ามันจะทำให้ apple ประหยัดเงินสำหรับจ้างนักพัฒนาของตัวเอง แต่มันหมายถึงการพอร์ทโปรแกรมจาก mac มายัง iphone นั้นจะง่ายมากและนักพัฒนาก็เรียนรู้ cocoa touch เพิ่มเติม

ข้อเสียผมก็ไม่ค่อยเห็นด้วยเท่าไหร่ ก็จริงอยู่ว่านักพัฒนาบน mac มันน้อย และตลาดมันแคบ เค้าอาจจะมองว่ามันต้องเขียนด้วย Objc อย่างเดียวมันจึงไม่น่าสนใจ จริงๆข้อเสียทีผมคิดว่ามันน่าจะเป็นที่ การหา resource สำหรับการพัฒนา หรือการเรียนรู้ Carbon/Cocoa นั้นน้อยมากๆ ( นี่เป็นสาเหตุหลักๆ ของผมที่เขียน blog นี้ขึ้นมา ) ผมก็คิดเหมือนกับเค้าน่ะว่า จะหานักพัฒนาซอฟแวร์บนแมคเพื่อเลี้ยงชีพ ในเมืองไทยจะมีสักกี่คน ผมก็ไม่รู้น่ะว่าเมืองไทยจะมีกี่คน แต่ให้เดา ไม่น่าจะถึง 20 คน ไม่ได้หมายถึงว่า เขียน web , php , perl , ruby บน mac น่ะ แต่หมายถึงคนที่ต้องเขียน Objc/Cocoa/Carbon แบบนี้

ความเป็นจริงผมก็ไม่คิดว่า จะได้มาเขียน  software บน mac แบบจริงๆจังๆน่ะ แต่ด้วยว่าอยากลองของใหม่ เลยต้องทำให้ผมต้องพัฒนาโปรแกรมบน mac เพื่อเลี้ยงชีพ จริงๆการเรียนรู้การเขียนโปรแกรมบน mac ไม่ได้ยากเลย แต่ที่สำคัญมากๆก็คือ แหล่งข้อมูลมันน้อยมากๆ ลำพังอ่าน doc ของ apple เองก็อาจจะงง ได้ง่ายๆ ผิดกับ Microsoft ที่เค้ามี MSDN เป็นแหล่งรวมทุกๆอย่างสำหรับการพัฒนา ถ้าจะให้เทียบ แล้วเหมือนกับ ร้านหนังสือ B2S คือ Apple ส่วน Amazon คือ Microsoft อะไรแบบนี้เลย  แหล่งข้อมูลมันต่างกันเยอะมากๆ ก็ไม่แปลกที่ทำไมว่า คนเขียนโปรแกรมบน mac มันน้อยนัก

Talk: iPhone SDK – I

วันก่อน Apple ได้ปล่อยตัว SDK ออกมาแล้ว และผมก็โหลดมาเรียบร้อยแล้ว จาก  Bittorrent !!! จริงๆ ก็ก็โหลดจาก Apple เองมาแล้ว แต่ เวปมันดันล่มซะนี่ ก็ให้ทำยังไงละ โหลดจาก bit เอาอาจจะไวกว่า ก็เลยโหลดมาลงดู เท่าที่ผมดูจาก vdo และ document แล้วเนี่ย พบว่า Apple ได้ออกแบบให้ การเขียนโปรแกรมจาก Mac มาสู่ iphone นั้นง่ายมากๆ เพราะว่า ตัว Framework นั้นก็แทบจะเหมือนกับ OSX อยู่แล้ว แต่สิ่งที่ Apple ยังไม่ได้ออกมาด้วยในตอนนี้ก็คือ Interface builder

แต่หลังจากผมลอง โหลดมาและลอง สร้างโปรเจคขึ้นมาทำการ Compile เล่นๆ ดูก็พบว่า โอ้ววว iPhone Emulator นี่มันดีจริงๆ ผมไม่เคยเห็น ว่าการพัฒนา App สำหรับมือถือมันจะง่ายขนาดนี้ ถ้าเป็น symbian นี่ท่าจะยากกว่านี้เยอะ

ความรู้สึกผมว่ามันแทบจะไม่ได้ต่างอะไรกับการเขียนโปรแกรมจาก mac มาสู่ iphone เลย และแน่นอนว่า ข่าวดีหลายอย่างก็คือว่า iPhone นั้นรองรับ C/C++ ตอนแรกคิดว่าจะให้เขียนเฉพาะ Objc ซะแล้วอีก และที่ดีกว่านั้นสำหรับผมก็คือว่า มันรองรับ Objc++ ด้วยสิ มันทำให้ผมเขียนโปรแกรม Objc แล้วไปใช้ lib ของ C/C++ ได้เลย

และใน iphone SDK นี้ได้ทำการ update Xcode เป็น Xcode 3.1 แล้ว หน้าตาก็เปลี่ยนไปในทางที่ดีขึ้น

ไว้คราวหลังจะลอง เอา sceen shot มาให้ดูละกันว่ามันเป็นยังไง