about bank

วันศุกร์, ธันวาคม 29, 2549

ออกเดินทางไปสาย 3

วันนี้ไปกินขาหมูที่บ้านน้ำเคียงดิน กับแก้วที่ไม่ได้เจอหน้ากันมา 2 อาทิตย์

ตอนแรกจะไปรถตู้ตามปกติแต่ปรากฏว่าคิวยาวมากๆ ถึงขนาดต้องต่อคิดซื้อตั๋วด้วย ทั้งๆ ที่ปกติถ้าซื้อตัวได้เลย ก็ต้องรอเป็นครึ่งชั่วโมงอยู่แล้ว ก็เลยตัดสินใจมาขึ้นรถตู้ที่ ม.ราม

นั่งรถเมล์มาถึง ม.ราม แล้วก็เดินอีก 500 เมตร ก็ถึงคิวรถตู้ แม้ว่าคิวจะยาวน้อยกว่า แต่ก็ต้องรอรถถึงคันที่ 6 หลังจากรถได้ซักพัก พบว่าอัตราการมาของรถตู้ช้ามากๆ เลยต้องคืนตัวแล้วขึ้นรถเมล์ดีกว่า ตอนแรกกะแค่ให้พ้นๆ ตรงนี้ไปก่อน แล้วค่อยหาที่ขึ้น แต่ดันนั่งยาวไปจนเกือบถึงศิริราช

รถตู้พาอ้อมไปถึง สุขุมวิทย์ เข้าสามย่าน ผ่านหัวลำโพง เข้า china town ผ่านไป ฝั่นธน ใช้เวลากว่า 2 ชั่วโมงครึ่ง ตอนแรกว่าจะลงหลายรอบ แต่ด้วยความคิดดีกว่า เดี๋ยวคงผ่านไปได้ เลยกลายเป็นนั่งยาวเลย หิวมั๊กๆ

สุดท้ายก็ตัดสินใจลงแล้วขึ้น taxi ไป Pata จากนั้นก็ขึ้นรถตู้ไปสาย 3 คนแน่นมากๆ ทั้งๆ ที่ปกติแทบจะนั่งคนเดียว

มาถึงสาย 3 อย่างปลอดภัย เจอหน้าแก้วก็หายเหนื่อยแต่ยังหิวอยู่ :D แก้วตอน 3 ทุ่มดูสวยมากๆ

(ถึงแม้แก้วจะสวยมาก แต่ด้วยความหิวเลยเอาแต่กินมะม่วงหิมพาน ไม่ได้ดูหน้าเท่าไหร)

พอถึงร้านก็รีบๆ สั่งอาหารก่อนจะหิวตาย ขาหมู่อร่อยมั๊กๆ กรอบๆ นุ่มๆ แต่ไม่ค่อยรู้สึกถึงใขมัน ทำให้กินได้เรื่อยๆ

ขากลับดันลองขับรถดู เจอตำรวจเรียกด้วย ดีนะที่อ้างพ่อแก้วเลยรอดมาได้ เฮ้อ... ต้องรีบสอบใบขับขี่ซะแล้ว

นั่ง taxi กลับใช้เวลาไม่ถึงชั่วโมง ทั่งๆ ที่ขาไปใช้เวลา 4 ชั่วโมง หมดตังค่า taxi ไป 2XX บาท

ไม่รู้ทำไปได้ไง :)

วันพุธ, กรกฎาคม 06, 2548

comm bldg

friend pic :D my first image on blog
()

"comm bldg" by apirakpana
comm bldg
tkool

วันพฤหัสบดี, กุมภาพันธ์ 24, 2548

Untitled

ไม่น่าเชื่อว่าเอารูปไปไว้บน blog จะยากเย็นได้ขนาดนี้... เอาเป็นว่า ผมเอาวิธีการเขียนไป post ไว้บน web ผมเองละกัน ไว้ใครอยากอ่านแบบมีรูปประกอบก็ไปดูใน apirak.com ละกันนะครับ



เขียนไว้นอนละแต่ไม่ได้ post ซักทีไม่นึกว่าจะยากขนาดนี้



วันนี้ลองมาพัฒนา application กันเพื่อทดสอบความสามารถหลายอย่างของ cocoa framework เช่น การเชื่อมต่อระหว่าง xCode กับ interface builder การทำ custom view และการใช้งาน slide view กับ color panel :) หลังจากที่เราทำเสร็จแล้วก็จะได้ผลดังรูปครับ



dotView.jpg



เราเริ่มต้นด้วยการ New Project ครับ



Pic1.jpg



จากนั้นเลือก New Project เป็น Cocoa Application



Pic2.jpg



ตั้งชื่อเป็น DotView หรือเป็นอะไรก็ได้ครับ แล้วแต่จะชอบในส่วนนี้



Pic3.jpg



หลังจากที่เราสร้าง project เรียบร้อยแล้ว รอซักพักหนึงเพื่อให้ xCode ทำ indexing ให้เราก่อน จากนั้นเรามาเริ่มกันที่ interface เลยนะครับ ให้ double click บน icon MainMenu.nib ที่ด้านซ้ายหรือด้านขวา ก็ได้



Pic4.jpg



พอ double click บน MainMenu แล้ว โปรแกรม interface builder จะถูกเปิดขึ้นมา ให้เราเอา ลาก customView มาใส่ในหน้าต่างที่ชื่อว่า Window ครับ (หน้าต่าง Windows นี่ล่ะที่จะเป็นภาพของ application ของเรา)



Pic5.jpg



ต่อจากนั้นก็เอา Slider กับ ColorWell มาใส่ใน Windows ครับ ระหว่างนี้อยากให้ศึกษาพวกเส้นสีฟ้าที่จะช่วยในการปรับแต่งให้ application ของเราให้ลงตัว ถ้าใครได้ศึกษา HIG (Human Interface Guideline) ของ apple จะเห็นว่าเส้นเหล่านี้ถูกออกแบบมาอย่างดีเพื่อช่วยให้เราพัฒนาโปรแกรมได้ตามที่ apple ได้วางไว้



Pic6.jpg



ต่อไปเราจะมาจัดการเรื่องขนาดของ view แต่ละอันนะครับ สำหรับส่วนนี้ก็เป็นส่วนที่ฉลาดมากๆๆๆ ของ Interface builder เช่นกันลองมาดูกันเลยนะครับ ขั้นแรกเปิด Info windows ขึ้นมาก่อน



Pic7.jpg



ให้เลือกที่ CustomView จากนั้นบน NSView (Custom) Info ให้เลือก Size แล้วกดให้เกิดรูปสะปลิงดังรูป ซึ่งหมายความว่า CustomView ตัวนี้จะขยายออกได้ทั้งบนล่างซ้ายขวา โดยยิดติดกับด้านข้างของ windows เอาไว้ ให้กด apple+r เพื่อทดลองผลครับ แล้วกด apple+q เพื่อกลับมาแต่งต่อ



Pic8.jpg



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



Pic9.jpg



สำหรับตัว Slide ก็ปรับตามรูปครับ แต่พอเห็นก็คงเดากันได้นะครับว่าหมายถึงอย่างไร :)



Pic10.jpg



พอเราได้ interface เรียบร้อยแล้วก็กลับมาที่ Xcode ครับ เราจะมาสร้าง CustomView ให้เป็นไปในแบบที่เราต้องการ สั่ง new file โดยกดที่ Menu -> File -> New File... จากนั้นเลือก Objective-C class



Pic11.jpg



การที่เราสร้าง class นี้ขึ้นมาก็เพื่อให้เป็นตัวแทนของ NSView โดยเราตั้งชื่อมันว่า DotView (เพราะเราจะวาดจุดลงไปครับ เลยเรียกแบบนี้ไปก่อน :p ) ลองดูต่อละกันว่าจะให้มันเป็นตัวแทนของ NSView ได้อย่างไร



Pic16.jpg



หลังจากสร้างแล้วเราจะได้ DotView.h กับ DowView.m มาสองไฟล์ อันนึงเป็น Header ไฟล์ อีกอันเป็น implement ไฟล์ ดังรูป แต่อย่าลืมเปลี่ยน NSObject ไปเป็น NSView ด้วยนะครับ (ในรูปไม่ได้เปลี่ยนให้ดู) ที่เราเปลี่ยนก็เพื่อให้ DotView ของเราต่อยอดความสามารถของ NSView มาใช้ครับ



Pic17.jpg



สำหรับไฟล์ DotView.m เราจะเขียนโปรแกรมเพื่อควบคุมมันแบบนี้ครับ






//
// DotView.m
// DrawCircle
//
// Created by Apirak Panatkool on Thu Jan 13 2005.
// Copyright (c) 2005 __MyCompanyName__. All rights reserved.
//

#import "DotView.h"

@implementation DotView






ส่วนแรกเป็น method initWithFrame ชื่อก็ค่อนข้างสื่อพอสมควร ว่า method นี้จะถูกเรียกตอนที่ Frame ถูกเรียกให้ขึ้นมา แล้วก็กำหนดค่าต่างๆ ให้กับตัวแปลของเราครับ






- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
center.x = center.y = 100.0;
radius = 50;
color = [[NSColor blueColor] retain];
}
return self;
}






method นี้เอาไว้เอาไว้ตอนปิด application ครับ






-(void)dealloc {
[color release];
[super dealloc];
}






method นี้จะถูกเรียกตอนที่ frame ถูก refresh ครับ






- (void)drawRect:(NSRect)rect {
//Clear the full bounds of the view

NSRect bounds = [self bounds];
[[NSColor whiteColor] set];
NSRectFill(bounds);

//Draw the dot
NSRect dotRect = NSMakeRect(center.x-radius,center.y-radius, 2*radius, 2*radius);
[color set];
[[NSBezierPath bezierPathWithOvalInRect:dotRect] fill];
}






อันนี้ชัดเจนครับถูกเรียกตอน mouse down อันนี้ก็เป็นข้อดีอันนึงของ cocoa ครับ มันเป็นแบบ call back แทนที่จะเป็นแบบวน loop คอยตรวจดู






-(void)mouseDown:(NSEvent *) event {
NSPoint eventLocation = [event locationInWindow];
center = [self convertPoint:eventLocation fromView:nil];
[self setNeedsDisplay:YES];
}






mouseDragged ก็เหมือน mouse down ครับ






-(void)mouseDragged:(NSEvent *)event {
[self mouseDown:event];
}






method changeSize กับ changeColor เอาไว้ให้ slideer กับ color มาเรียก






-(void)changeSize:(id)sender {
radius = [sender floatValue];
[self setNeedsDisplay:YES];
}

- (void)setColor:(NSColor *)newColor {
if(newColor != color){
[color release];
color = [newColor retain];
[self setNeedsDisplay:YES];
}
}

-(void)changeColor:(id)sender{
NSColor *newColor = [sender color];
[self setColor:newColor];
}

@end






ต่อไปก็กลับมาจัดการ Interface Builder ต่อครับ ให้เลือกที่ windows MainMenu.nib แล้วเลือก tab Classes



Pic18.jpg



จากนั้นให้ clickขวาบน NSObject แล้วเลือก ReadFiles...



Pic19.jpg



จากนั้นก็เลือก File DotView.h ครับ



Pic20.jpg



แล้วเราก็จะเห็น DotView โผลออกมาครับ อย่าลืมสังเกตุนะครับว่า DotView เป็น subclass ของ NSView



Pic22.jpg



ที่นี้ก็ถึงเวลาแปลงให้ CustomeView ให้กลายเห็น DotView ของเราวิธีการก็คือเลือก CustomView แล้วเลือก class DotView ใน DotView (Custom) Info -> Custom Class -> DotView ครับ จะสังเกตุคำว่า Custome view เปลี่ยนเป็น DotView ไปแล้ว :)



Pic23.jpg



จากนั้นให้กด ctrl

enable root user

มีเพื่อนถามหลายคนแล้วว่าจะ enable root user บน mac ทำยังไง เลยเอามาเขียนไว้ครับ

Enter root. Open Applications: Utilities: Netinfo Manager, then choose Security: Authenticate, enter your admin user
password, then choose Security: Enable Root User, and provide the root user its own password.

วันอังคาร, กุมภาพันธ์ 22, 2548

เข้า irc คุยกันเรื่อง openstep

วันนี้เข้า irc อีกครั้งหลังจากไม่ได้เข้ามา 8 ปี

ใช้แล้วรู้สึกดีเร็วดี :) ichat กับ adiumx มันอื่ดๆ นิดๆ ส่งสัยเพราะเรามีแค่ 867MHz

ใช้โปรแกรม x-chat aqua ครับ ขนาด 1.5 MB

วิธีเข้าห้อง openstep ก็คือให้ใช้ server freenode แล้วเลือก usermenu->join Channel..

มี channel ดีดีดังนี้ครับ

- #openstep-th <- ปกติ nu จะเฝ้าห้องไว้
- #tlwg <- thai linux working group
- #cocoadev <- เข้าไปไม่มีใครคุยด้วย

สามารถพิมพ์ join #openstep-th แบบนี้ก็ได้

แล้วถ้าต้องการคุยภาษาไทยก็ให้พิมพ์

/charset tis-620

ก็จดไว้กันลืมอีกครับ :)

วันอังคาร, กุมภาพันธ์ 15, 2548

Untitled

จดไว้กันลืมอีกตัว เพราะต้องได้ใช้แน่นอน



http://www.tusc.com.au/tutorial/html/



เป็น tutorial การ setup j2ee ด้วย jboss แล้วใช้ eclipse ช่วย :)



วันเสาร์, กุมภาพันธ์ 05, 2548

จดไว้กันลืม เรื่องการ set jsp บน osx

http://www.macosxhints.com/article.php?story=20050202163402976

เป็นวิธีการ setup tomcat ครับ

วันอาทิตย์, มกราคม 16, 2548

Cocoa Framework

เข้าโรงบาลครับ เลยถึงโอกาสเขียนบทความยาวๆ ซะเลย หลังจากศึกษา Cocoa มาได้ซักพัก เลยอยากเริ่มอะไรเพื่อให้หลายๆ คนที่จะศึกษามันสามารถต่อยอดตรงนี้ไปได้เลย ไม่ต้องมาเริ่มใหม่ :)

สำหรับบทความชุดนี้คงเป็นเรื่องของ Cocoa Framework ในเบื้องต้น โดยจะเริ่มบทความแรกด้วย What is Cocoa?

cocoa เป็น Object-oriented APIs สำหรับพัฒนาโปรแกรมบน Mac OS X เมื่อเราพูดถึง cocoa เราจะพูดถึง Framework เช่น Quicktime Framework, Cocoa Frame work เป็นต้น จริงๆ ตัว Framework เป็นชุดของ library ที่เป็นพื้นฐานให้เราใช้พัฒนาโปรแกรมออกมาในรูปแบบนั้นๆ เช่น ใน cocoa frame work เราจะใช้วิธีการ call back แทนที่จะเขียนโปรแกรมวนลูปเพื่อคอยตรวจสอบความเปลี่ยนแปลงของโปรแกรมที่เราคุยด้วย ช่วยให้โปรแกรมสามารถทำงานได้รวดเร็วมากขึ้น แต่ก็เพิ่มความซับซ้อน ซึ่ง! ตรงนี้เองที่ Framework จะรับหน้าที่ซ่อนความซับซ้อน ออกไปจากโปรแกรมของเรา

ณ ตอนนี้ cocoa รองรับอยู่สองภาษาคือ Objective-C ซี่งเป็นภาษาพื้นฐานที่สร้าง Cocoa ขึ้นมา และมีภาษา java ซึ่งก็สามารถทำงานได้ดีบน cocoa framework

Foundation



เมื่อไหรก็ตามที่เราต้องการเขียนโปรแกรมโดยที่ไม่มี User interface ไม่มีหน้าตาไม่มี menu เราก็สามารถใช้งาน Foundation ซึ่งเป็นแกนของ Cocoa framework สำหรับฟังก์ชันที่ไม่มี user interface
- Root class (NSObject) class ส่วนมากใน cocoa framework ต่างก็ใช้ NSObject คล้ายๆ กับที่ class Object ในภาษา java
- Operation system facilities and interaction สำหรับนักพัฒนาที่ไม่ต้องการ ลงไปจัดการกับ File system หรืออะไรลึกๆ ในระดับ Unix ก็จะใช้ library ชุดนี้ เช่น NS FileManager, NSBundle, NSPort, NSStream, NSTask, NSHost, NSRunLoop, NSDate เป็นต้น
- Internationalization ที่คอยจัดการเรื่องความแตกต่างของภาษา ลักษณะการเขียนวันที่ ของแต่ละประเทศ ก็จะมี library ให้ใช้ เช่น NSString, NSCharacterSet, NSNumberFormatter, NSDateFormatter, NSLocale
- Collections
- Scripting ที่ช่วยให้เราสามารถใช้ภาษา script ในการควบคุมโปรแกรมได้ ถ้าใครใช้เครื่อง apple อยู่คงเข้าใจว่า applescript นั้นช่วยให้งานง่านขึ้นมาก ถ้าคิดๆ ดูก็คงคล้ายกับ macro ใน MS Office ครับ
- XML processing, Web Access ก็จะมีตั้งแต่ NSXMLParser ที่มากับ panter และ NSXMlDocument, NSXMLNode, NSURL ที่จะมาใหม่ เป็นต้น ซึ่งก็ช่วยให้เราติดต่อกับ xml หรือ web ได้ง่ายขึ้น
- และอีกคลายส่วน ซึ่งคงพูดต่อไปครับ...

Appkit



นี่ก็เป็นหนึ่งในส่วนแกนของ cocoa framework ที่ช่วยให้นักพัฒนาจัดการกับ user interface และส่วนของฟังก์ชั่นต่างๆในระดับ application เช่น
- Drawing, event handling ซึ่งก็ตรงตามชื่อคือช่วยในการวาดรูปบน application และการตรวจสอบเหตุการต่างๆ ที่เกิดขึ้น library ต่างๆ ก็เช่น NSWindows, NSView, NSEvnet, NSBezierPath, NSColor, NSShadow, NSOpenGLView, NSQuickView เป็นต้น
- Standard control จะเห็นว่าใน interface ของ aqua จะมี control ให้ใช้มากมาย เช่นพวกปุ่ม พวกสไลด์ ต่างๆ cocoa ก็มีชุดของ library ที่เอาใช้ควบคุม control เหล่านั้น เช่น NSButton, NSSlider, NSToolbar, NSTableView เป็นต้น
- Standard dialogs เช่นพวก savepanel, controlpanel หรือ พวก alert ที่เราใช้อยู่เป็นประจำและควรจะทำให้เป็นรูปแบบเดียวกันเพื่อให้ผู้ใช้ os สามารถเข้าใจ application ของเราได้ทันทีไม่จำเป็นต้องเสียเวลาเรียนรู้ใหม่
- Accessibility
- Image, sound, media handling
- Document architecture ที่ช่วยให้เราสามารถสร้างเอกสารหลายอันได้ใน application เดียวเหมือนกับใน photoshop หรือ ms word เป็นต้น
- Text เพื่อช่วยในการแก้ปัญหาปใน application ไม่ว่าจะเป็นเรื่องของภาษา ตัวอักษร การตัดคำ หรือคำถูกคำผิดเป็นต้น library ที่มีให้ใช้ก็เช่น NSTextView, NSTypesetter, NSFont เป็นต้น
- และแน่นอนว่ายังมีอีกมายมายที่เราจะพูดถึงต่อไป

Cocoa Strengths


- Full-featured and powerful
- Consistent and easy-to-use จะสังเกตุได้ว่าเมื่อเริ่มศึกษา library หนึ่งของ cocoa ก็จะทำให้เราสามารถเดาได้ว่า library อื่นๆจะทำงานอย่างไร และนั่นทำให้ง่ายมากขึ้นในการพัฒนา
- Customizablea and extensible เราสามารถปรับแต่ง และเพิ่มเติม library ต่างๆใน cocoa ได้เนื่องจาก cocoa เป็น Object-Oriented ทำให้นักพัฒนาสามารถพัฒนาไปได้ในรูปแบบที่เหมาะสมกับ application ของตัวเองมากที่สุด
- Tuned for Mac OS X และแน่นอน library เหล่านี้ถูกปรับแต่ให้ทำงานได้เร็ว และมีเสถียรภาพมากที่สุดสำหรับ Mac OS X cocoa ไม่ได้ถูกออกแบบให้มี layer มากมาย และไม่ได้ทางานอยู่บนพื้นฐานที่อ่อนแอ แต่อยู่บนพื้นฐานของ OS X ที่มีเสถียรภาพอย่าง Unix quark เป็นต้น
- play well with other cocoa มีพื้นฐานอยู่บน Objective-C และ C ดังนั้นจึงไม่มีปัญหาที่เราจะนำเอา Open-source library ที่มีอยู่ทั่วไปมาใช้ได้ทันที และนั่นเป็นที่มาของคำจำกัดความเรื่องความเข็งแกร่งของ cocoa ที่ว่า

Simple Things Simple
Complex Things Possible

ในบทต่อไปจะลองพัฒนา application ง่ายๆบน cocoa

* Cocoa มีบน GNUStep หรือเปล่า?