ผมเฝ้าคิดเสมอว่าการที่เราเรียนรู้ทางด้านเทคโนโลยีจะทำให้เราสามารถสร้างสรรค์สิ่งใหม่ๆ โดยผ่านการเรียนรู้ทางด้านวิศวกรรมที่ผมเรียนมา แต่พอมาพบกับโลกแห่งความเป็นจริงแล้วทำให้ผมคิดได้ว่าเทคโนโลยีไม่ใช่ทั้งหมดในงานประดิษฐ์วิศวกรสามารถประดิษฐ์สิ่งใหม่ๆ ขึ้นมาบนโลกนี้ได้ตามความรู้และความสามารถ แต่การนำไปใช้งานได้จริงนั้นคนละเรื่อง ยกตัวอย่างเช่นผมสร้างรถยนต์ไร้คนขับได้สำเร็จ แต่การใช้งานคุณต้องนั่งตรงที่คนขับ และสวมแว่นตาไฮเทคที่เชื่อมภาพที่ตาเห็นเข้ากับสมองของรถยนต์ และหากเป็นเช่นนั้นผมไม่แน่ใจนักว่าจะมีใครซื้อรถยนต์คันนี้หรือไม่ ในเมื่อสุดท้ายคุณไม่สามารถที่จะนั่งอ่านหนังสือพิมพ์สบายๆ หรือว่าเล่นเกมส์บนรถยนต์ไร้คนขับได้เลย เนื่องจากข้อจำกัดในการใช้งานของมัน

ดังนั้นจริงๆ แล้วเรื่อง Art เป็นเรื่องสำคัญในงานประดิษฐ์อย่างหลีกเลี้ยงไม่ได้ เราไม่สามารถที่จะประดิษฐ์อะไรก็ตามดังใจเราคิด แล้วไม่คำนึงถึงการใช้งานของมัน( How it work) เพราะการใช้งานคือสิ่งที่ผู้ใช้สัมผัส ไม่ใช่เทคโนโลยีเบื้องหลังที่ขับเคลื่อนมัน ดังเปรียบได้เหมือนเทคโนโลยีคือหัวใจของงานประดิษฐ์ Art คือจิตวิญญาณของมัน

ผมหวังและคาดหวังอย่างสุดหัวใจว่า งานประดิษฐ์ชิ้นต่อไปของผมจะต้องเต็มไปด้วยเทคโนโลยีที่ล้ำสมัย ผสมด้วยกลิ่นอายแห่งงานศิลปะ

Chevrolet Questionnaire

posted on 09 Oct 2011 16:01 by totiz
iPad App @ Code gears - July 2011
ต้องการดาวน์โหลด Mac OS X Lion ใหม่จาก Mac App Store เพื่อที่จะใช้ในการ ลงเครื่องใหม่ สามารถทำได้ง่ายๆ ด้วยการกด Option + Click ใน Macc App Store ดังนี้
 
  • เปิด Mac App Store
  • กด Option ค้าง แล้วคลิก "Purchasees"
  • กด Option ค้าง แล้วคลิก "OS X Lion" จากรายการ
  • จากปกติที่จะขึ้น "installed" จะกลายเป็น "install" หรือ "$29.99" ให้เรากดเพื่อดาวน์โหลดใหม่อีกครั้งได้เลย หรือถ้ายังไม่ได้ให้ กด Option ค้างแล้วคลิก

อ้างอิง: Osxdaily.com

หลังจากศาสดาองค์ใหม่ 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