Technical

หลังจากศาสดาองค์ใหม่ Tim Cook ขึ้นเปิดตัว iPhone 4S กันไปเมื่อคืนที่ผ่านมา 4 ตุลาคม 2554 พร้อมทั้งปล่อย Xcode 4.2 GM Seed มาให้เหล่านักพัฒนาส่งแอปของตัวเองขึ้น App Store กันได้แล้วจากเวอร์ชั่นนี้ (Beta จะไม่สามารถส่งแอพขึ้น App Store ได้)
 
มีอะไรใหม่ใน Xcode 4.2?
  • Automatic Reference Counting - ไม่ต้อง retain reelase autorelease
  • Storyboard - ออกแบบอินเตอร์เฟสและความสัมพันธ์ระหว่าง View ได้ในไฟล์เดียว
  • เปลี่ยนค่าเริ่มต้นคอมไพเลอร์เป็น Apple LLVM 3.0 จาก GCC 4.2 
  • เพ่ิมเติม มีอะไรใหม่ใน iOS 5 ( for Developer )

เปลี่ยนมาใช้ Automatic Reference Counting (ARC)

ด้วยข้อดีหลายประการของ ARC ทั้งการควบคุมหน่วยความจำที่ทำโดยอัตโนมัติ โค้ดดูสะอาดตาขึ้น เพราะไม่ต้องมีส่วน retain, releaes, autorelease, autorelease pool, dealloc อยู่ในโค้ดเลย ทำให้ดูคุ้มค่าที่เราจะเสียเวลามาปรับโค้ดเพื่อให้รองรับฟีเจอร์นี้ โดยทำตามนี้

  1. เปิดโปรเจคเราขึ้นมาใน Xcode 4.2 (แนะนำให้ทำการแบ็คอัพก่อน)
  2. คลิกชื่อโปรเจคเรา -> เลือกแทป Build Settings
  3. ค้นหาคำว่า automatic ในช่องค้นหา
  4. เปลี่ยนคอมไพเลอร์เป็น Apple LLVM 3.0
     
  5. กำหนดค่า Objective-C++ Automatic Reference Counting... เป็น Yes
     
หลังจากนั้นกดคอมไพล์ จะขึ้น error ในหลายจุดโดยเฉพาะ retain, release, retainCount และ autorelease pool ที่เราสร้างไว้ ให้ลบโค้ดส่วนนั้นออกทั้งหมด
 
 
ลบ method dealloc ออก
 
method init จะต้อง return ค่าเป็นคลาสเดียวกัน หรือ id เท่านั้น ในเคสนี้แก้เป็น (id) initURLRequest:....
 
เปลี่ยนจากการประกาศ (retain) (assign) ในไฟล์ .h เป็น (strong) (weak)
 
หรือถ้าใครไม่อยากทำทั้งหมดนี้ด้วยตัวเอง สามารถสั่งให้ Xocde แปลงโดยอัตโนมัติได้จาก
Edit -> Refactor -> Convert to Objective-C ARC
 
 
* ข้อควรระวัง หากใช้การแปลงอัตโนมัติ จะขึ้น conflit ให้เราแก้เป็นจำนวนมากขึ้นกับขนาดของโปรเจค เราควรแก้อย่างระมัดระวัง เพราะจะมีผลกระทบกับ logic ของโค้ดด้วย
 
ส่วนฟีเจออื่นๆ อย่าง storyboard หากใครสนใจสามารถดูโค้ดตัวอย่างได้จาก example project ใน Xocde 4.2 ได้เลยครับ (ติ๊กถูกตรง storyboard ทุกครั้งที่สร้างโปรเจคใหม่)
 
หากใครมีข้อสงสัย หรือติดปัญหาการแปลงโค้ดเป้น Xocde 4.2 แชร์กันมาได้ในโพส หรือ email มาถามกันได้ครับ
 
ตอนเนื่องจากตอนทีแล้ว Three20 ตอน 1 - มาทำความรู้จัก Three20 กันเถอะ
 
 
ด้วยตัว Three20 ที่ถูกพัฒนาโดยวิศวกรของ Facebook ทำให้มันมีส่วนเสริมหลายๆ ตัวที่ช่วยในการจัดการ HTML Tag และ HTTP Request เตรียมไว้ให้แล้ว ทำให้ช่วยเวลาในการพัฒนาลงไปได้มาก เนื่องจากการเรียกใช้ทำได้ภายใน 1-2 บรรทัดเท่านั้น

NSString Additions

 
Check whitespace
ใช้สหรับตรวจสอบว่า HTML String ที่เรารับมามีค่าว่าง (\t\n หรือ ช่องว่าง) หรือไม่ ตอบกลับเป็น True/False
Input
NSLog(@"\n\n====== NSString : white space =======");
NSString* ws = @" \t\n";
NSString* empty = @"    ";
NSString* nws = @"hello";
NSLog(@"'%@' contains only whitespace ? : %d", ws, [ws isWhitespaceAndNewlines]);
NSLog(@"'%@' contains only whitespace ? : %d", nws, [nws isWhitespaceAndNewlines]);      
NSLog(@"'%@' is empty? : %d", empty, [empty isEmptyOrWhitespace]);
 
Output
 
' 
' contains only whitespace ? : 1
'hello' contains only whitespace ? : 0
'    ' is empty? : 1

 
Strip HTML tags
ใช้สำหรับแปลงโค้ด HTML เป็นเป็น Text โดยจะตัด Tag HTML ออกทั้งหม  
 
Input
NSLog(@"\n\n====== NSString : stripHTML =======");
NSString* html = @"I am an HTML script.";
NSString* stipped = [html stringByRemovingHTMLTags];
NSLog(@"html : %@", html);
NSLog(@"stripped : %@", stipped);
Output
====== NSString : stripHTML =======
html : I <b>am</b> an HTML script.
stripped : I am an HTML script.
 
Parsing URL query parameters
 
ตัวนี้ผมใช้บ่อยมาก ใช้ช่วยแปลง URL เป็น NSDictionary ให้อัตโนมัติ มาดูตัวอย่างกันเลยดีกว่า
 
Input
NSLog(@"\n\n====== NSString : parse URL params =======");
NSURL* url = [NSURL URLWithString:
  @"http://www.google.com/search?sourceid=chrome&;ie=UTF-8&q=pizza"];
NSString* paramString = [url query];
NSDictionary* params = [paramString queryDictionaryUsingEncoding:NSASCIIStringEncoding];
NSLog(@"url : %@", url);
NSLog(@"params:\n%@", params);
Output
====== NSString : parse URL params =======
url : http://www.google.com/search?sourceid=chrome&;ie=UTF-8&q=pizza
params:
{
    ie = "UTF-8";
    q = pizza;
    sourceid = chrome;
}
 
Create a URL from parameters
 
ใช้สร้าง URL จากพารามิเตอร์ต่างๆ  หลักการทำงานคือส่วนทางกับ "Parsing URL query parameters"
 
Input

NSLog(@"\n\n====== NSString : create URL query string =======");
NSString* baseUrl = @"http://www.yahoo.com/search";
NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
[params setValue:@"pizza" forKey:@"q"];
[params setValue:@"json" forKey:@"format"];
NSString* fullURL = [baseUrl stringByAddingQueryDictionary:params];
NSLog(@"query parameters\n%@", params);
NSLog(@"query string is : %@", fullURL);
Output

====== NSString : create URL query string =======
query parameters
{
    format = json;
    q = pizza;
}
query string is : http://www.yahoo.com/search?q=pizza&;format=json
 
 
md5 hash
 
อันนี้ของแถม เพราะไม่ได้เกี่ยวกับ HTML แต่เป็นส่วนเสริมของ NSString ที่น่าสนใจเหมือนกัน ใช้สำหรับเข้ารหัส MD5
 
input

NSLog(@"\n\n====== NSString : md5 =======");
NSString* s1 = @"hiya Three20 world";
NSString* md5 = [s1 md5Hash];
NSLog(@"md5('%@') =>  %@", s1, md5);
output

====== NSString : md5 =======
md5('hiya Three20 world') =>  6fd98ef06e6041b87dbe8dc978b95c4c
md5Hash is also available for NSData
 
 

Three20 เป็นไลบรารีโอเพนซอร์ซสำหรับ iOS พัฒนาโดยวิศวกร Facebook ถูกใช้กันอย่างแพร่หลาย ทั้งเป็น Core ในการพัฒนาแอพ Facebook เอง และแอพดังๆ หลายตัวทั้ง Posterous, Pulse, Meetup.com, และ SCVNGR  ก็ได้นำไปใช้

จุดดึงดูของ Three20 อยู่ที่ความง่ายในการใช้งาน และการทำเรื่องยากๆ ซับซ้อน ให้เป็นเรื่องง่ายด้วยโค้ดที่กระชับ ผ่านการออกแบบที่เป็นเอกลักษณ์ของ Facebook เอง เช่น URL-based Navigation ที่มองทุก View เป็น Page และสามารถเข้าถึงได้ผ่าน URL ที่เชื่อมไว้

Highlight

Photo Viewer 

 

 

เป็นอีกหนึ่งฟีเจอร์ที่น่าสนใจของ Three20 ถูกออกแบบให้ทำงานได้เหมือนแอพ Photo บน iPhone แต่เพิ่มความสามารถในการโหลดรูปผ่าน URL มาแสดงเป็นอัลบั้มได้อัตโนมัติ

TTTable View

 

หรือ Simple Table View ที่มอง Table เป็น Array และสามารถกำหนดให้แต่ละเซลล์มีลักษณะที่แต่งต่างกันได้เช่น เซลล์รูป เซลล์ข้อความผสมรูป เซลล์ LongText ที่มีขนาดขึ้นกับข้อความ

HTTP Disk Cache


เนื่องด้วย NSURLRequest สามารถเก็บแคชในเฉพาะบนแรมเท่านั้น ถือว่าเป็นข้อจำกัดสำหรับแอพประเภท Internet-aware ตัว TTURLRequest เกิดมาเพื่อแก้ปัญหานี้ รวมทั้งฟีเจอร์ที่น่าสนใจอย่าง pause/resume ก็ถูกเพิ่มเข้ามาด้วย

Launcher


คนเล่นแอพ Facebook จะคุ้นเคยกันดีกับ Launcher อยู่แล้ว ลักษณะจะเป็นเมนูทีถูกเรียงกันเป็นตาราง และสามารถทำ Paging หลายหน้าได้

URL-based Navigation

จากที่ได้พูดถึงข้างต้น ตัว Three20 อณุญาติให้เราผูก View เข้ากับ URL และเรียกใช้ได้ในทุกๆ ที่ เช่น tt://myContract/getDetail ผูกเข้ากับหน้าแสดงรายละเอียดเพื่อนในสมุดโทรศัพท์

TTLog

เพิ่มขีดความสามารถให้กับ NSLog โดยการแยก Log เป็น Info,Debug,Error และ TTDASSERT ที่ช่วยในงานตรวจสอบหรือ Validation ข้อมูลก่อนนำไปใช้ หากมีข้อผิดพลาดจะแจ้ง Error ออกมา

TTWeb Browser

ถูกใช้เป็น Web Browser ให้กับแอพหลายตัวที่อยู่ใน App Store ตอนนี้ เทียบได้ว่าเกือบทุกแอพที่สามารถเปิดเวปได้ในตัว จะใช้ TTWeb กันหมด

ที่กล่าวมาข้างต้นเป็นเพียงแค่ส่วนหนึ่งใน Three20 ยังมีอีกหลายตัวที่น่าสนใจ สามารถศึกษาเพิ่มเติมได้ที่ http://three20.info

ดาวน์โหลดโค้ดตัวอย่างได้จาก Github  https://github.com/facebook/three20 (โหลดมาเปิด Example/TTCatalog แล้วเลือก TTCatalog ก่อนรัน) 

อ้างอิง: http://www.raywenderlich.com/656/introduction-to-three20

edit @ 22 Sep 2011 01:29:35 by totiz

[Upgrade] php 5.2 with yum on Centos

posted on 24 Jul 2009 05:08 by totiz in Technical

  ณ. ตอนนี้ทาง Centos หรือ Redhat บน Web server ทั้งหลายสามารถอัดเตด php ได้สูงสุดที่
version 5.1.6 หากอัพเตดผ่าน yum โดยปกติ

  แต่ว่า repository ของ remi สามารถอัดเตดเป็น version 5.2 ได้ผ่าน yum โดยทำตามนี้

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

หลังจากนันก็สั่ง 

yum --enablerepo=remi update php

แล้วก็ทำการ restart httpd(apache)

service httpd restart
# php -v
PHP 5.2.10 (cli) (built: Jun 21 2009 11:10:43)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

เพียงเท่านี้ก็เรียบร้อย  หากใครมีปัญหาก็โพสถามไว้ได้นะครับ

ที่มา: http://bluhaloit.wordpress.com/