2005년 7월 29일 금요일

간단한 Cocoa Application (3)

Instance Builder에서 Foo 클래스의 인스턴스를 생성합니다.


생성된 Foo instance입니다.


Foo 클래스 생성 시 만들었던 Outlet과 Action을 연결합니다.
연결을 할 때는 Control 버튼을 누르고 마우스를 드래그합니다. 시작점이 굵은 사각형으로 표시됩니다.

Outlet의 원뜻인 출구처럼 Foo클래스에서 인터페이스로 내보내는 연결을 해줍니다.



Action을 받아서 Foo클래스로 넘겨주는 연결을 생성합니다.



Foo 클래스의 헤더와 구현을 클릭하여 내부 코드를 입력합니다.






'Build and Go' 버튼을 눌러서 실행시킨 모습입니다.

Window가 작성한 프로그램입니다. Xcode에서 프로그램 실행 시에는 아래의 Run Log도 같이 뜹니다.



@ Interface Builder에서 Interface를 작성하는 위치가 창의 초기 위치가 됩니다.

2005년 7월 27일 수요일

오늘 본 재미있는 기사들...

전자신문에 재미있는 기사가 있더군요.

엠파스, 브리태니커 백과사전 검색 오픈
엠파스에서 백과사전 검색엔진으로 '브리태니커'의 컨텐츠를 사용한다고 하네요. 브리태니커 사전을 살까 한 때 고민도 했었는데 살필요가 없어진 듯... ^^
http://www.etnews.co.kr/news/detail.html?id=200507260013&keyword=%BF%A5%C6%C4%BD%BA

아로마소프트의 휴대폰용 멀티플 자바 VM 개발

'지민아빠'님이 기술력이 좋던 회사라고 하셨던 그 아로마인지 모르겠네요. 폰에서 디버깅 가능한 솔루션을 제공한다고 하는데 재미있겠네요 ^^..
http://www.etnews.co.kr/news/detail.html?id=200507260156

출처는 전자신문입니다~

2005년 7월 25일 월요일

GIF 포멧

GIF 포멧은 비트맵 이미지입니다. 색으로는 256색만을 가질 수 있으며 /dʒɪf/ 또는 /gɪf/로 발음합니다.

포멧은 두가지 형태가 있습니다.
87a - 오리지널 GIF 포멧
89a - CompuServe에서 만든 87a의 개선 버전입니다.

  • 한 스트림안에 여러 이미지가 들어가는 것을 지원해줍니다.
  • 이미지 전체가 다운로드 되는 중에 이미지를 점진적으로 진행되는 것을 보여줄 수 있습니다.(interlaced 기능)
  • Application-specfic한 메타데이터를 넣을 수 있습니다.


  • 두 개의 버전은 파일 시작 부분의 6개 byte들로 구분되어질 수 있습니다. 6개의 byte들은 ASCII로 "GIF87a"나 "GIF89a"를 가질 수 있습니다.


    GIF의 특징 중 하나는 Unisys소유의 LZW 압축 알고리즘을 사용하는 것입니다. 처음에 Compuserve에서 GIF 포멧을 개발할 때 LZW 알고리즘에 특허가 있는지를 모르고 개발되었습니다.(1989년) 그 후 GIF 포멧이 LZW 알고리즘을 사용하는 것을 발견한 Unisys에서 특허 사용에 따른 비용을 요구하게 됩니다.(1949년)

    2003년 6월 20일, 미국에서 LZW 알고리즘의 특허는 종료되었으며 유럽은 2004년 6월 18일, 일본은 2004년 6월 20일, 캐나다는 7월 7일 종료되었습니다.

    출처 : http://en.wikipedia.org/wiki/Gif

    2005년 7월 24일 일요일

    테터에서 PDF로 출력하는 무식하면서도 아주 간단한 방법

    ※ 필요조건 : PDF로 출력 가능한 프린터 드라이버 또는 서비스가 있어야 합니다.
    예를 들면, Mac OS X의 PDF 출력기능이나, Adobe PDF Distiller, 한컴의 PDF등등

    1. 테터에서 분류 전체보기의 위치를 클릭합니다.
    저의 경우 : http://okjungsoo.woweb.net/tt2/tt/index.php?ct1=-1

    2. 해당 웹페이지의 소스보기를 합니다.

    3. 소스에서 자신의 글이 몇개인지 확인합니다.
    테터에서 관련 글은 상대 경로로 'index.php?pl=202&ct1=-1' 형식으로 진행됩니다. 여기서 'pl='얼마의 얼마가 글 개수입니다 . 저의 경우에는 202개 였습니다.

    4. 테터가 설치되어 있는 ftp로 이동한 후 테터폴더의 /tt/admin/setting_skin.php를 엽니다.

    5. '블로그 글을 한 페이지당 ~개 표시합니다.' 사이에서 for 루프를 찾습니다.
    for ($i=1;$i<=30;$i++)

    루프의 최대값을 자신의 최대개수로 바꾸어줍니다.
    저의 경우 for ($i=1;$i<=202;$i++)

    6. 환경설정으로 들어가서 스킨관련 키를 누른 후 블로그 글을 한 페이지 당 '~'개로 표시합니다. 에서 최대개수로 바꿉니다.

    7. 저장 후 Mac의 웹 브라우저인 Safari에서 블로그를 부릅니다.

    8. Safari의 '파일>최대 크기의 프레임 프린트'를 클릭합니다.

    9. PDF 버튼을 눌러서 PDF 저장을 하면 됩니다.


    ※ 주의사항 : 자신의 글이 많을수록 파일로딩에 엄청난 시간을 잡아먹습니다. 출력 시간은 몇 분 안걸리구요.
    ※ 화면 레이아웃의 경우 Mac 프린팅 시스템에서 축소 후 출력하게 되므로 글자가 매우 작을 수 있습니다.
    ※ 윈도우 및 기타의 경우에 대해서는 테스트를 못했습니다. 레이아아웃이 어떻게 처리될 지는 모르겠네요.

    간단한 Cocoa Application (2)

    Doc 윈도우에서 Classes tab을 선택합니다.
    맨 좌측에서 java.lang.Object와 NSObject를 보실 수 있습니다.
    이 들을 사용하여 새로운 Class들을 만들 수 있습니다.

    Objective-C에서는 일반적으로 Class들을 만들 때 NSObject를 상속받아서 만듭니다. java.lang.Object처럼 기본적인 객체로서의 갖추어야할 속성이나 메소드들을 가지고 있는 클래스이구요.

    java와의 차이점은 java에서는 모든 클래스들이 Object 클래스를 상속받아서 만들어져야 하는데요. Objectie-C에서는 NSObject와 동급의 클래스를 만들 수가 있습니다. 이러한 동급의 클래스를 Root Class라고 하구요.

    Root class가 위치한 tab에서 NSObject를 상속받는 클래스 Foo를 만듭니다.



    Foo 클래스 내부의 속성과 메소드를 정의할 차례인데요.
    먼저, Cocoa(Objective-C의 tutorial에서는 instance variable로 표기되어있더군요.)에서의 용어를 살펴보면 다음과 같습니다.
    Instance variables that are pointers to other objects are called outlets
    Methods that can be triggered by user interface objects are called actions

    outlet이 java의 attribute에 해당하고 action이 method에 해당한다고 보시면 될 것 같네요. 약간의 차이는 있어도요.

    클래스 Foo의 속성 및 메소드 설정이 가능한 Inspector 창



    선택된 Outlet tab에서 새로운 outlet을 추가하면 Outlet Name이 나옵니다. 여기에서 Type을 선택할 수 있습니다.

    Objective-C에서는 오브젝트는 기본적으로 id로 나타내집니다. 이 때 오브젝트의 의미는 통상적인 객체 자체 뿐만 아니라 메소드도 포함하게 됩니다. 표기는 다음과 같습니다.
    id Object;

    id는 int 타입으로 Object의 포인터입니다. 컴파일 시에는 어떤 것인지 알 수 없으므로 Runtime시 Dynamic하게 처리가 됩니다. id값이 0인 놈이 하나 있는데 이놈은 nil이라 불립니다. nil은 java의 null객체에 해당합니다.

    여기에서 id가 아닌 실제 클래스이름으로 선언할 수도 있습니다. 이는 static typing이라 불리며 표기는 다음의 형태가 됩니다.
    NSTextField *textField;

    객체 이름에 포인터표기에 주의하시구요. (제일 싫어하는 Pointer내요 ㅠㅠ) 객체들은 항상 포인터로 표기되어야 합니다. Type을 선언함으로서 컴파일 시간에 type checking을 통해서 더욱 robust한 프로그램을 만들 수 있구요. 이 때 id는 감추어질 뿐입니다. id는 존재하구요.

    Foo클래스에 action을 추가한 모습입니다.


    Objective-C (1)에서 언급한 것처럼, method에서 +는 class methods, - 는 instance methods를 예기합니다.
    return type으로는 class나 instance 지시자 다음에 () 형태로 오게 됩니다.
    - (float)radius;

    return type을 정의하지 않는 경우에는 id가 리턴이 된다고 가정합니다. argument들은 method 이름 뒤에 :을 사용하여 구분이 됩니다. 이 때 argument의 type은 ()로 정의됩니다.
    - (void)setRadius:(float)aRadius;

    argument가 여럿인 경우는 :로 구분되며 각각의 argument에 이름을 붙일 수 있습니다. 만약 width와 height를 설정하는 메소드를 만든다면 다음과 같이 만들 수 있습니다.
    -(void)setWidth:(float)width :(float)height;
    -(void)setWidth:(float)width height:(float)height;

    이름을 argument에서 따로 설정해주는 이유는 메소드를 호출하는 클래스에서 어떠한 값을 넣어주는 지에 대해서 명확하게 정의할 수 있기 때문입니다.

    Foo에 속성을 넣고 다음과 같이 Foo클래스 파일을 생성하면

    interface와 implementation 파일이 Doc window에 추가된 것을 확인하실 수 있습니다. " tt_link="" tt_w="449px" tt_h="434px" tt_alt="" />

    주말야구장



    대서였던 어제...
    두산과 LG의 경기가 있었다.

    내야부터 외야끝까지 가득찬 LG 관중석과 사진에서 보이다시피
    듬성듬성 빈자리를 내보이는 두산 관중석..

    아무리 감독이 대체할 투수가 없다고 무너지는 투수를 계속 올린다해도.
    이런 더운 날에 꽉찬 관중한테 너무하는 짓이 아니었나 싶다.

    어떻게.. 어떻게.. 만루 찬스와 만루에 가까운 찬스
    (한 3,4번 정도 있었습니다.)를 모두 놓칠 수 있단 말인가.

    처음에는 여럿 동참하던 응원전도 식어버리고...
    주말에 즐거운 만남도 짜증으로 변해버렸다... ㅡㅡ;;

    P.S.
    주말 야구장은 응원석이 외야로 가더군요. 주중에는 응원석이 내야였는데..
    야구경기는 선발 투수보고 가야겠더군요. 지는 게임은 가는 사람이 화나요..

    2005년 7월 23일 토요일

    Mac에서 화면 캡처.app로 캡처하기

    Mac에서 화면 캡쳐하는 방법은 여러가지가 있습니다.
    기본적으로 사용하는 방법은 Mac 운영체제에서 캡쳐하는 것입니다. 그러나 가끔 Option키를 누른 상태이거나 Command(사과) 버튼을 눌렀을 때 나오는 화면을 캡쳐하고 싶을 때가 있을 것입니다.

    그런 경우에 사용하기 좋은 방법일 것 같은데요.
    '응용프로그램 > 유틸리티 > 화면 캡처.app' 를 사용하시면 쉽게 하실 수 있습니다.
    # 저장 시 포멧은 Tiff가 됩니다. 별도저장을 하더라도 Tiff포멧이 됩니다. 확장자를 PNG로 바꿔도 Tiff가 안되네요.

    화면 캡처.app를 실행한 후 시간 제한을 누릅니다.



    시간 제한이란 창이 뜰텐데요.
    사진기에서 타이머를 사용하는 것처럼 화면 캡쳐가 가능합니다.



    • 이 외에 캡쳐하는 방법으로 '미리보기.app'를 사용하는 방법도 하나입니다.
      사용방법은 '미리보기.app > 파일 > 화면캡쳐'를 누르면 됩니다.

      User inserted image

    • 시스템의 단축키로 제공되는 기능을 사용해도 되는데요. 'Command +Shift +3'은 전체 화면을 캡쳐하며, 'Command +Shift +4'는 드래그&드롭 캡쳐를 지원합니다.
    • Command +Shift +(숫자)는 PNG 포멧으로 저장이 됩니다.
    • 클립보드에 들어있는 내용은 '미리보기.app'의 '파일 > 클립보드에서 신규'를 클릭하시면 파일로 생성이 가능합니다.
      User inserted image