2010년 12월 22일 수요일

Objective-C multiple argument to methods

-(int) set: (int) n: (int) d;

이렇게 선언 하고

[object set: 1 : 3];

이렇게 호출 할수도 있다.
(methods without argument names)

C/C++ 에서 여러 파라메터를 하나의 함수에 전달 하여 호출 할 때 이렇게 해야 할거 같은데...
1 : 3 ~~ 음 이게 좀 어색 하게 다가 온다.


오브젝티브C 에서는
일반적으로는 다음과 같이 선언 한다.

@interface Rectangle: NSObject
{
int width;
int height;
}

@property int width, height;
-(void) setWidth: (int) w andHeight: (int) h;

@implementation Rectangle;
-(void) setWidth: (int) w andHeight: (int) h
{
width = w;
height = h;
}

사용 할때
[myRect setWidth: 5 andHeight: 8];


2010년 12월 21일 화요일

Objective-C @property , @synthesize

@property , @synthesize 를 간단하게 요약해 봅시다.

@interface Fraction : NSObject
{
int numerator;
int denominator;
}

@property int numerator, denominator;

~~~
@end

-------------------------------------------------

@implementation Fraction

@synthesize numerator, denominator;

-------------------------------------------------

myFraction.numerator = 1;
myFraction.denomiator = 3;


요정도 까지..



2010년 12월 17일 금요일

Objective-C / C++keyword 비교

http://en.wikipedia.org/wiki/Objective-C
여기를 기준으로 간단하게 c++과 비교해보자
이걸 토대로 코드 컨버팅도 가능할듯 하다.

오브젝트의 메서드를 호출 하는 방법
obj->method(argument);

[obj method: argument];

class 선언

@interface classname : superclassname {     
// instance variables 
} 
+classMethod1; 
+(return_type)classMethod2;
+(return_type)classMethod3:(param1_type)param1_varName;   


-(return_type)instanceMethod1:(param1_type)param1_varName :(param2_type)param2_varName; 
-(return_type)instanceMethod2WithParameter:(param1_type)param1_varName andOtherParameter:(param2_type)param2_varName; 
@end


class classname : public superclassname {  
    public:   // instance variables     
    // Class (static) functions   
    static void* classMethod1();   
    static return_type classMethod2();   
    static return_type classMethod3(param1_type param1_varName);     
    // Instance (member) functions   
    return_type instanceMethod1(param1_type param1_varName, param2_type param2_varName);   
    return_type instanceMethod2WithParameter(param1_type param1_varName, param2_type param2_varName=default); 
};


-(void) setRangeStart:(int)start :(int)end; 
-(void) importDocumentWithName:(NSString *)name withSpecifiedPreferences:(Preferences *)prefs beforePage:(int)insertPage;


class 구현
@implementation classname 
+classMethod {     
    // implementation 
} -instanceMethod {     
    // implementation 
} 
@end




이거 말고 나머지
datatype 
걍 C/C++ 과 유사 하다고 할수 있음
 id 타입이란게 하나 있긴 한대 아직 모르겟음

operator 완전 같은거 같음

loop statement 완전 같다고 봄

making decisions (if / else / switch) 완전 같다고 봄

아직 나머지는 보지 못했음 


2010년 12월 16일 목요일

Objective-C class

내가 아는 컴퓨터 랭귀지는 Basic, fortran, cobol , C, C++, java, pascal,
여기서 Basic 아직도 기억이 나긴 하는 언어 이지만 이제 쓸일이 없다.
fortran cobol 언급할 필요도 없는 구시대에 언어 80년대 말 학원가에서 초딩들을 오래 붙잡으려고 가르칠때 나또한 어설프게 배웠다.
하여 지금은 전혀 구사 하지도 못할듯,
C, C++ 밥벌이 언어이므로 언제나 보고 잇다.
Java처음 등장 부터 맘에 안들어서 걍 멀리 했다. C++가 유사한 구문이 많다 정도만 알지 깊게 모른다.
pascal 볼랜드 C++빌더에서 VCL 컴퍼넌트를 이해하기 위해 읽기 정도만 가능한 언어
델파이 보다 C++빌더에 더 친했기 때문에 실제로 작성해본 코드는 거의 없다.
오히려 파스칼로 구현된 코드를 C++로 변경하는 작업을 해본듯.

이제 오브젝티브-C 도대체 머하는 놈인지 한번 끝까지 봐보고 판단해 보자
왜 이따이 언어를 도입해서 진입 장벽을 만드는지.

Addison wesley - Programming in Objective C 2.0을 보면서 나름대로 토를 달아보자..

#import

@interface Fraction: NSObject
{
int numerator;
int denominator;
}

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

@end

@implementation Fraction
-(void) print
{
NSLog(@"%i/%i", numerator, denominator);
}

-(void) setNumerator: (int) n
{
numerator = n;
}

-(void) setDenominator: (int) d
{
denominator = d;
}

@end

int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;

myFraction = [Fraction alloc];
myFraction = [myFraction init];

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];

NSLog (@"The value of myFraction is:");
[myFraction print];
[myFraction release];

[pool drain];
return 0;
}


위 코드를 하나 하나 분석해 봅시다.

@interface section
@implementation section
program section

3개의 section으로 구분 지어 진다.

@interface section

@interface NewClassName: ParentClassName
{
memberDeclarations;
}

methodDeclarations;
@end;

위 예제에서는 NSObject가 부모 클래스이고 Fraction이라는 클래스를 선언 하고
멤버 변수 numerator, denominator; 를 각각 int형으로 선언
메서드를 print , setNumerator, setDenominator 를 선언 한것이다.

-(void) print;

-가 의미 하는 것은 instance method이고
+는 class method를 의미 한다. class 메서드는 나중에 설명이 될듯 여기선 스킵
리턴형이 void 이다.

-(void) setNumerator: (int) n;
리턴형은 void이고 아규먼트 int형 n으로 선언 된것이다.
아규먼트가 있을 경우 : 를 붙여 준다.

- (void) setNumerator : (int) n;

method type, return type, method name, method take arguments, arguments type, argument name

@implementation section

@implementation NewClassName
methodDefinitions;
@end


머 대충 보면 함수 구현 부 보면 알수 있을듯 하여 스킵한다.

Program section

NSObject를 상속 받아서 alloc, init , release 등의 메서드를 호출 할수 있다.

Fraction *myFraction = [[Fraction alloc] init];
이렇게 사용할수 있다.

이는 지금 까지 많이 봣던
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
과 같은 스타일로 자주 나온다.

메서드 호출
[myFraction setNumerator: 1];
[myFraction print];

메모리 해제 등
[myFraction release];

간단하게 클래스 선언 메서드 구현 메서드 호출 등을 알아 봣다.
아직 생소 하지만 이제 슬슬 눈에 들어오는듯 하다.




2010년 12월 10일 금요일

Objective-C hello world, cmd line compile

$ vi hello.m
$ cat hello.m
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"Hello world!!");

[pool drain];
return 0;
}
$ gcc -framework Foundation hello.m -o hello
$ ./hello
2010-12-10 15:27:00.815 hello[20293:903] Hello world!!

macport

http://www.macports.org/

osx 에서 유닉스 명령들을 수행하고 싶거나 패키지를 설치하고 싶을때가 잇을 것이다.

위 사이트에서 macport를 찾아서 설치를 하고

커맨드라인에서 sudo port install 패키지

하면 설치가 된다.

unrar이 필요해서 했는데.

커맨드라인에서 unrar이 아주 잘동작 한다.


osx ntfs read/write driver

http://www.apple.com/downloads/macosx/system_disk_utilities/ntfs3g.html

NTFS 포멧에 디스크를 읽고 쓰려면 반드시 설치 해야 하나보다.

잘못 찾으면 15일 트라이얼 버젼도 잇는데

apple 사이트에서 제공 하는 것은 freeware인듯

bootcamp설치 해서 NTFS디스크를 액세스 할수 잇는듯 해도

막상 이동식 디스크를 붙여 보니 쓰기가 안되서 설치 했다.

2010년 11월 30일 화요일

2 iphones and 1 computer sync

처음에는 나 혼자 아이폰을 사용하다가
와이프까지 아이폰을 가지게 되었다.

처음에는 별생각 없이 윈도우에 계정을 하나 더 만들어서 내 계정에서 아이튠 실행하고
와이프 계정에서 아이튠을 실행해서 각자 따로 동기화 하도록 했다.

그렇게 어언 8개월 가량을 잘 써왓는데.

맥미니를 구입 하면서 노트북에 500기가 하드를 맥미니에게 내주어야 하는 상황
드디어 말로만 듣던 아이튠 보관함 백업을 해야 하는 시기가 왔다.

노트북에 윈도우를 재설치하고 아이튠을 재설치 아이튠관련 데이터 들을 다시 다 복사 했다.
물론 윈도우 재설치에 계정을 다시 두개 만들었다.

이제 맥미니가 스노우 레오파드에서 아이튠을 사용해 볼까?
윈도우에 있는 아이튠 관련 데이터를 모두 이사 시키고 싶다.

이제 선택에 순간이 왔다.

1. OS 에 두계정을 만들어서 각각 로그인 해서 각각 아이튠을 따로 관리 한다.

2. 하나의 계정에서 아이튠 하나로 두 아이폰을 관리 한다.

1번은 해봤다. 별 문제는 없으나 윈도우 재설치 등등 두번씩일을해야 하고 아이폰 동기화를 위해 윈도우 사용자를 전환 해야 하는 불편이 있었다.

그럼 2번은 인터넷을 찾아 보니 보관함을 새로 생성 한다고 하는데 쉬프트키 누르고 아이튠 실행?


스노우 레오파드에서는 옵션 버튼 (alt) 키를 누르고 실행 해야 한다.

1번은 해봣으니 2번으로 했다.
두대의 아이폰을 서로 다르게 인식해 준다. 좋다. 만족 스럽다.

그러나!! 보관함이 2개여도 아이폰은 아이디로 인식 하지만..

연결된 아이폰이 사용하는 보관함이 어떤건지 연결 해주지는 않는다.
즉 보관함이 서로 다르게 크로스로 싱크 할수도 있을듯.

이렇게 사용할때는 더 주의가 필요하고 항상 alt+로 실행 해서 연결 시킬 아이폰과 보관함을 선택 해줘야 될듯 하다.

장점이라면 홈피시에 구지 여러 계정을 만들지 않아도 된다는점 정도

2010년 11월 23일 화요일

mac mini c2d 1.83 모델은 EFI32

좀더 자료를 모아 보니
나의 맥미니는 EFI32 였다.

ioreg -l -p IODeviceTree | grep firmware-abi
터미널에 위와 같이 입력 하면 EFI 확인 할수가 있다.

cloud:~ sparrow$ ioreg -l -p IODeviceTree | grep firmware-abi
| | "firmware-abi" = <"EFI64">
cloud:~ sparrow$

회사 iMac 해보니 64였다.

나의 맥미니는 2007년산이라 안되나 보다.

EFI32 to EFI64 펌웨어 업글은 없나??

cpu가 64비트 core2duo 인데 안타깝다.
apple이 아름답게 EFI64로 올려 주면 좋겟다.

구글링을 해보니 EFI 64의 경우 default kernel은 32이지만
부팅중에 6과 4를 누르고 키면 64부팅이 가능 하다고 한다. 회사 스노우 레오파드도 64 부팅이 가능하겠다.

하지만 회사꺼니 걍 내비러 두자

Library/Preferences/SystemConfiguration
cloud:SystemConfiguration sparrow$ ls com.apple.Boot.plist
com.apple.Boot.plist
요파일을 수정 하면 default로 64비트 커널로 부팅이 된다고 한다.
key>
Kernel Flags
arch=x86_64

나의 맥미니가 64비트 커널로 부팅 되아야 4기가를 쓸텐데...

2010년 11월 22일 월요일

충격 mac mini(core2duo 1.83 merom) max memory 3GB!!

나의 맥미니 메모리 4GB 인식 하는줄 알았는데....
헉...
3GB 3072MB 이렇게 인식 하고 있는 top 화면을 보았다.

그럼 core 2 duo 는 64비트 cpu인데..
스노우 레오파드가 설치 될때 32비트로 절로 설치 되는 것인가.

사과를 클릭하고 Abot this mac(이 매킨토시에 관하여)
자세히를 클릭해서 소프트웨어

64비트 커널 확장 파일: 아니요


음 32비트 모드라는 건데...


그럼 64비트 부팅과 32비트 부팅을 지원하는 건가?


osx snow leopard ??


http://macperformanceguide.com/SnowLeopard-64bit.html


위와 같은 웹사이트에 글을 발견 했는데..


과연 64비트 부팅과 4기가 메모리를 활용 할수 잇는 건가??


맥미니 램 업글하다가 그만 리모콘 리시버도 고장 냈건만 ㅠ.ㅠ

2010년 11월 21일 일요일

mac mini irda remote control receiver 수술 실패기


mac mini 처음 분해시 바로 고장을 내버린 리모콘 리시버 부품
발가락 4개를 인두질로 붙여 주면 될거라 굳게 믿고 수술에 들어 갔다.

인두, 실납, 모든게 준비 되었다.

살짝 잘린 다리를 이어줄 철사 같은것은 작은 LED전구 다리로 하기로 하고
그리고 부품을 고정 시켜 붙여줄 순간 접착제

퍼티나이프, 니퍼, 작은 드라이버 등등 모든 준비물을가지고

맥미니를 분해 했다.

한번도 분해 당해 본적 없던 맥미니는 튼튼하게 버티지만 퍼티 나이프에 몇번 옆구리가
찔린 맥미니는 손쉽게 분해가 된다.

수술을 끝내고 봉합(케이스 결합) 전에 한번 부팅해서 리모콘을 테스트 했다.

안된다. 이런 ..
다시 몇분여간 집중에 집중을 하는 수술을 하였다.
니퍼로 다시 띠어 내고 다시 접합을 반복 결국 모든 다리가 다 끊어져
더이상 납땜질을 할수가 없다.

포기 했다.

나의 맥미니는 모든 기능중에 0.01% 리모콘 기능을 상실했다.

리모콘으로 동작 하는 프로그램이 뭔지도 모르는데.. 찾아보니 Front Row였다.

나중에 무선 마우스랑 무선 키보드 달아 주면 모두 필요 없는거다.
맘속으로 혼자 다짐 하면서 케이스를 봉합했다.




2010년 11월 20일 토요일

mac mini windows7


mac mini에 동봉 되어 있는 leopard 10.5.4 dvd에는 윈칠이 64bit 를 지원하지 못한다.

당연 스노우 레오파드로 업그레이드 했지만 dvd이미지를 구운게 아니라 usb플레쉬로 설치 한것이라.

bootcamp 3.1을 어둠에 경로로 받았다.

이걸 다시 T60에 네트워크로 줫다가.

mac mini를 win7로 부팅 하고 다시 네트워크로 가져 와서 모두 설치 했다.

그리고 점수를 쟀더니. 살짝 오른듯 한대. 개낀 도낀.

순정 mac mini상태가 C2D 1.83ghz ram 1GB hdd 80GB
--> RAM 4GB, HDD 500GB

하지만 win7에서 2.7GB로 인식 하는걸로 봐서 여기 바이오스도 3GB 그리고 나머지는 대략 그래픽에서
공유 해가는 느낌

T60은 3.0GB로 인식 햇는데.. 쩝

나중에 뜯어서 3:3으로 맥미니랑 T60이랑 나눠야 할지도 모르겠다.

T60 win7이 있으니 bootcamp체험은 다해봣지만 설치할건 없다.

나중에 맥북프로나 iMac머신을 장만 해도 가족들이 M$ OS를 찾을때 시원하게 하는 방법 정도 숙지..
로 생각 해야 겠다.

그리고 가장 낮은 점수를 받는건 역시 그래픽, 인텔 내장 그래픽 카드 GMA950은 성능이 아주 빈약하다.
T60에서도 ATI1400 moblity로 할수 있는 게임이 극히 적었는데.

GMA950은 뭐 생각 조차 하지 못할 정도의 수준인듯.

bootcamp 도전 windows7 64 (Select CD-Rom Boot Type:_ 해결 방법)

mac mini에 윈칠이 설치를 못했다는 것이 너무나 억울해서.. 새벽에 도전을 하였다.

윈7 DVD 구워 둔게 문제가 된다는 것을 구글링을 통해 알았다.

검색어는 select cdrom boot type

http://forums.macrumors.com/showthread.php?t=467704

"1.

2.

Select CD-Rom Boot Type:_"

위와 같이 나오면서 멈춰 버리고 나같은 맥초보는 이거 아무 OS라도 설치하고 나가야 mac으로 부팅이 되는 건지 CD를 뺄수는 있는 건지... (이전 게시물)...

그리고 부트 캠프 지원에 가서 파티션을 날렸지만
매번 alt 키로 부팅 하지 않으면 windows 찾는지 booting못한다는 메세지...

그것도 설정에 가서 시동디스크에서 선택을 해줘야 디폴트 boot가 결정되는데.. 그것도 모르는 맥초보..

사설을 접고 이제 본격적으로 win7 DVD를 구워 봅시다.

http://jowie.com/blog/post/2008/02/24/Select-CD-ROM-Boot-Type-prompt-while-trying-to-boot-from-Vista-x64-DVD-burnt-from-iso-file.aspx

위 링크를 보면 뭐 그림도 잇고 나름 잘 설명 한거 같은데.. 프로그램도 설치해야 하고.. imgburn 귀찮이즘이 몰려 온다.

http://blog.bsd.bz/?p=13
위 링크가 내가 직접 해본것이고 성공 하였기에 위링크를 추천 한다. (간단 하다.)

The simple solution is as follows (taken from: Sergio Mcfly’s Blog):

1.Download Vista SP1/2008 x64 ISO from MSD
N, orgrab your CD
2.Create 3 folders c:\efi-iso c:\efi-exe c:\efi-dvd
3.Download oscdimg.exe from here into c:\efi-exe
4.Extract iso using 7Zip or Wi
nRAR (Or copy the contents of the DVD) into c:\efi-dvd
5.Start up a command prompt (Start -> Run -> cmd)
6.Type: cd c:\efi-exe
7.Type: oscdimg -n -m -bc:\efi-dvd\boot\etfsboot.com c:\efi-dvd c:\efi-iso\server2008dvd.iso

한글로 요약하면
3개의 디렉토리 efi-iso, efi-exe efi-dvd를 만들고
oscdimg.exe를 다운박아서 efi-exe에 복사
win7 DVD이미지를 efi-dvd에 복사해서 winrar로 풀어라.. 아니면 DVD 시디에서 걍 통째로 복사.
winrar로 풀었다면 iso파일은 지우고

oscdimg -n -m -bc:\efi-dvd\boot\etfsboot.com c:\efi-dvd c:\efi-iso\server2008dvd.iso
위와 같이 타이핑 하면 efi-iso에 이미지 파일이 떨어진다.

위 예는 server2008인데 적절히.. 바꿔서..

작성된 iso는 windows7 기본 이미지 굽기 (탐색기에서 마우스 오른쪽 버튼) 윈7에서는 버닝 프로그램을 설치 할 필요가 없음.

하여 구우면 mac mini가 잘도 인식 하는 아름다운 DVD가 된다.

지금 이글을 쓰는 T60 옆에는 mac mini가 신나게 윈7을 인스톨 하고 있다.

2010년 11월 17일 수요일

bootcamp 삽질기

맥미니 수령후 처음한 작업은 무모하게 퍼티 나이프 하나 가지고 바로 분해 작업 들어간 것이었다.
그다음 작업은 이것 저것 모두 설치해보기

그리고 아직 맥이 익숙치 않으면 언제라도 M$ 윈도우를 쓸지도 모른다는 생각에 VM이나 bootcamp 질 이었다.

패러럴즈.. 회사꺼에 버추어박스 xp는 잘 쓰고 잇으니 나는 패러럴즈다...

잘된다.

이제 좀더 빠른 퍼포먼스와 4GB 메모리도 활용할수 있는 bootcamp 에 윈칠이 설치...

부트캠프는 알고 보니 스노우 레오파드에 걍 파인더 --> 유틸리티에 --> 부트캠프지원 으로 있다.
이것도 몰라서 프로그램을 어둠에 경로에서 받아야 되나 찾아 해멧다.

손쉽게 윈도우 파티션을 마련하고 시키는 데로 윈도우 OS 시디 윈칠이 시디를 넣었다.

자동으로 재부팅..

이런 Select CDROM type 1, 2 이렇게 멈처 있다.

아무리 재부팅 시켜도 이상태...

맥으로 부팅은 어찌 하나?? CD 는 어떻게 꺼내는가??

시디 꺼내는 방법을 T60을 이용해서 찾았다. 다행이다. 다른컴터가 하나 있다는게.. 참 아이폰도 있구나..
구글링 결과 부팅시에 마우스를 누르고 있으면 CD가 나온다...

허나 시디가 나와도 부트캠프땜시 OS를 설치하라고 설례발이다... 이거 설치 안하면 맥으로 부팅이 안되나??
미련 스럽게 m$비스쳐를 설치 했다.

그동안 구글링 하니 부팅시 alt(option)키 누르면 부팅 메뉴가 나온단다...

이렇게 우여 곡절 속에 부트 캠프 체험을 하고

바로 윈도우 파티션을 없애 버렸다.

난 맥미니론 맥만 한다.

윈도우 할일있으면 T60을 쓰면 된다.!!

2010년 11월 16일 화요일

mac mini 분해기


머 인터넷을 뒤져보면 맥미니 분해에 대한 좋은 글들이 많다.
하지만 실제로 해보지 않으면 글로만 봐서는 그리고 사진 몇장 봐서는 느낌이 오지 않는다.

메모리 2GB 2개를 구매 해놓고
노트북 에 업그레이드 해주면서 달아 주었던 500GB를 다시 빼서 다운그레이드 시키고

이두 부품을 MB138/KHA core2duo 1.83ghz , ram 1GB, HDD 80GB짜리 맥미니를
메모리 4GB, HDD 500GB로 업그레이드 하려고...

준비물 침착하게 빠데(일본어 노가다 용어) putty knife 퍼티칼 또는 껌떼는 칼
요거 준비 마트에 없더라, 다이소에도 없더라, 우리회사 1층에 사무용품 가게에 있더라.

이걸로 맥미니에 아래 하단 엽구리를 쑤신다.
잘 안된다.
왼쪽 쑤시고 앞에 쑤시고 오른쪽 쑤실려면 틈이 없어진다.

퍼티 나이프를 갈아서 해야 하나.

별 용을 다 써봐도 잘안된다.

여기까지는 인터넷에서 글과 사진을 봐 가면서 끙 끙 거렸다.

드디어 퍼티 나이프가 깊숙히 (여기서 실수) 깊숙히 필요 없고 1cm정도 들어갈까 말까 에서 탁탁 뒤로 제처 주면 따닥 부서지는 소리로 들리게만 하고 들어 올려 줘야 하는데..

난 앞쪽면만 너무 심하게 들어 올려 지고 퍼티 나이프가 깊숙히 들어가고, 뒷면 커넥터 들은 그대로...

결국 전면에 있는 무언가 부품 하나가 부러져 나왔다... 아뿔사 40만원 버렸구나....

우여 곡절 끝에 모두 분해 했다.

다행히도 부러져 버린 부품은 찾아 보니 리모컨을위한 irda 리시버였다.

나중에 시간이 나면 발가락 네개를 땜질 신공을 펼쳐야 겟다.

다행히 4GB메모리와 500GB 하드 디스크를 잘 인식 하고 잘 동작한다.



2010년 11월 14일 일요일

T60 2613 A54 max memory ??

Tinkpad T60 merom platform 1.83 core2duo
OS가 windows64bit 라면 메모리를 4G가 이상 인식 할거라는 막연한 지식...

메모리 4GB를 인스톨 해보았다.
결과는 4GB설치 되었지만 3GB가 사용가능

무엇이 문제인가??

맥미니 MB138KH/A를 중고로 구매 하고 거기에 업그레이드를 하려고 주문 한 메모리.


이딘가에서 본 MB138KH/A의 max memory 3GB!!

정말인가 보다.

내일 회사에 도착할 맥미니를 분해해서 메모리를 업그레이드 해보면 알겟지만

일단 T60 메모리도 3GB이상 안되나 보다.


무엇이 문제인가 intel 945GM 칩셋 4GB된다고 되어 있는데..


최악에 경우 맥미니 3GB T60 3GB 사태가 ..... 될지도....










2010년 11월 4일 목요일

computed goto

재미있는 주제가 있어서 글을 써본다.

C언어에서 잘 사용하지 않는 keyword goto
그래서 더욱더 모르고 잇는듯한.. goto

computed goto라는 용어가 맞는지 틀리는지는 모르지만 일단 goto로 점프할 레이블에 번지수를 변수에 넣고
변수를 이용해서 점프를 한다.

Labels as Values

You can get the address of a label defined in the current function (or a containing function) with the unary operator &&. The value has type void *. This value is a constant and can be used wherever a constant of that type is valid. For example:

void *ptr;
/* ... */
ptr = &&foo;

To use these values, you need to be able to jump to one. This is done with the computed goto statement1, goto *exp;. For example,

goto *ptr;

Any expression of type void * is allowed.

One way of using these constants is in initializing a static array that will serve as a jump table:

static void *array[] = { &&foo, &&bar, &&hack };

Then you can select a label with indexing, like this:

goto *array[i];

Note that this does not check whether the subscript is in bounds--array indexing in C never does that.

Such an array of label values serves a purpose much like that of the switch statement. The switch statement is cleaner, so use that rather than an array unless the problem does not fit a switch statement very well.

Another use of label values is in an interpreter for threaded code. The labels within the interpreter function can be stored in the threaded code for super-fast dispatching.

You may not use this mechanism to jump to code in a different function. If you do that, totally unpredictable things will happen. The best way to avoid this is to store the label address only in automatic variables and never pass it as an argument.

An alternate way to write the above example is

static const int array[] = { &&foo - &&foo, &&bar - &&foo,
&&hack - &&foo };
goto *(&&foo + array[i]);

This is more friendly to code living in shared libraries, as it reduces the number of dynamic relocations that are needed, and by consequence, allows the data to be read-only.

Footnotes

The analogous feature in Fortran is called an assigned goto, but that name seems inappropriate in C, where one can do more than simply store label addresses in label variables.

원문:http://gcc.gnu.org/onlinedocs/gcc-3.4.1/gcc/Labels-as-Values.html

2010년 11월 3일 수요일

ucloud for mac



일단 windows 7 64bit에서 어느 정도 잘 동작 하는 것을 확인 하고
아이폰에서 사진도 보고
이제 회사에서 iMac 에 ucloud 메니져 mac os용을 설치 해서 동작 해보았다.
잘되는가 싶더니 가금 죽어버린다.
아직 osx용은 뭔가 문제가 있는듯

아이폰에서 블로그에 올릴 스크린 샷을 저장하고
ucloud에 모바일 폴더에 올리고

iMac에서 모바일 폴더에 올린 이미지를 내려 받아 지금 블로그를 작성 중이다.

요런 기능 자체는 만족 스럽다.


이제 가끔 회사 문서와 집에서 문서를 매직 폴더로 동기 화 하는 것을 나중에 함 해보도록..

2010년 11월 2일 화요일

kt ucloud


KT show 고객이거나 qook고객이면 ucloud가 20GB가 공짜다.


아이폰을 쓰면서 네이버에 N 드라이브가 나왓을대 쓸만 하겠거니 했는데.

막상 잘 활용 하지 못했다.
결정적인 이유는 Windows 7 64비트, Linux 용 메니져 프로그램이 없다는 이유.

현재도 Windows 32bit만 지원 하고 브라우져에서는 상대적으로 제약 사항이 있기 때문에

나의 N드라이버 사용기는 대략 몇개의 파일을 브라우저로 올리고 아이폰에서 조금 봣을 뿐이다.
Windows7 64비트 용 메니져 프로그램 및 타 플렛폼 메니져 프로그램이 개발 된다면
좀더 많이 활용할거 같다.

google에 Picasa란 프로그램도 다른 사람에게 초대 메일을 받아 존재를 인식 하고사진을 여기에 올려야 겟네. 잠깐 생각 했다가 그냥 잊혀져 올리지 않게 되었다.

TV에서 ucloud 하길래 한번 접속해서. 프로그램을 내려 받고
백업 폴더를 수많은 사진이 저장된 노트북에 폴더를 선택해 주었다.

사진들이 저절로 업로드 되고 있다.

동시에 아이폰에서 ucloud 앱을 받아 설치하고 터치 하는 순간

올라간 사진들이 보이기 시작 한다.

아... 약간의 차이가 게으른 나를 유저로 만들고 있다.

ucloud는 여러 프로그램중에 나에게 사진 백업을 시키게 한넘이다.

거기에 메니져 프로그램이 mac도 지원한다.

요즘 회사에서 사용하고 있는 컴퓨터가 iMac이라서 더 기대가 된다.
osx초보이기 때문에 모든 프로그램이 새롭고 신기하다. mac용이라면...



2010년 10월 31일 일요일

thinkpad T60 ubuntu 10.10 upgrade



T61 ubuntu 10.04 에서는 문제가 없었지만.
T60 ubuntu 10.04 는 듀얼 모니터 세팅에 문제가 있었다.
ATI x1400 그래픽 카드를 사용하는 T60머신에서 듀얼모니터를 세팅 하지 않으면 정상적으로 화면이 표시 되지만 듀얼 모니터를 키는 순간 화면이 자물 자물 움직인다.
하여 19인치 모니터를 ubuntu로 부팅 하면 꺼야 했다.
10.10이 지난 10월 10일 나왔지만 집에 컴퓨터 ubuntu 파티션으로 부팅 할일이 없던 터라.
이제야 업그레이드를 해주었다.
기대도 안했는데. 듀얼모니터 문제를 스스로 해결해주니 고맙다.

2010년 10월 27일 수요일

windows7 does not recognize flash memory with GUID partition map

usb 메모리가 ntfs로 포멧되어 있었는데. 이걸 osx에다 꽂으니 인식을 못하고 포멧 하란다.

ubuntu와 osx에서 잘 인식되고 이렇게 잘 사용했는데. 집에가서 윈칠이에 꽂으니 인식이 안된다.

좀더 알아 보니 guid파티션 으로 구성되어서

그중에 첫번째 파티션 200mb만을 인식 하고
나머지는 윈칠이가 모르는 모양이다.

어찌 해결 해야 하나 알아 보니
x86osx.com에 질문을 남겨서.

답변을 얻었다.

디스크 유틸리티에서 usb를 선택 하고 파티션을 골라서 옵션에서 mbr로 해줘야 한다.

이걸 모르니 osx 에서 fat32로 했다한들 GUID파티션 맵으로 되면 윈칠이에서 문제가 될줄이야.

뭐 윈칠이가 GUID 파티션 맵을 완벽히 지원 못하는게 문제지만.

해결 방법은 디스크 유틸리티에 있다.

2010년 10월 25일 월요일

c array initialize { 0 }; or { 0, };

얼마전에 { 0 ,}; 이렇게 배열을 초기화 하는 것을 당연 하게 생각 했는데..
인터넷에 검색 해보니 { 0 } 이렇게 알고 있는 사람도 많은듯 하여

리눅스 에서 gcc로 테스트 해보았다.

$ cat array_init.c
#include
int main (void)
{
int a[10]={ 0 };
int b[10]={ 0,};
int c[10]={ 1 };
int d[10]={ 1,};
int e[10];
printf ("a[] %d %d \n", a[0], a[1]);
printf ("b[] %d %d \n", b[0], b[1]);
printf ("c[] %d %d \n", c[0], c[1]);
printf ("d[] %d %d \n", d[0], d[1]);
printf ("e[] %d %d \n", e[0], e[1]);
}
$ gcc -o array_init array_init.c
$ ./array_init
a[] 0 0
b[] 0 0
c[] 1 0
d[] 1 0
e[] 0 0
$ gcc -O2 -o array_init array_init.c
$ ./array_init
a[] 0 0
b[] 0 0
c[] 1 0
d[] 1 0
e[] 1478605760 1478605760

{ 0 } , { 0, } 모두 초기화 된다.
옵티마이즈 레벨을 주지 않으면 배열은 그냥 초기화 된다.
(디 버깅 시에 지역 변수들이 쓰레기 값을 가지지 앟고 침착 하게 초기화 되어 잇는 상황을 자주 보았을 듯..)

{ 1 }, { 1, } 가 1로 모두 초기화 하라는 뜻은 아니다.
이런 경우 memset() 을 이용 해야 겟다.

2010년 10월 22일 금요일

iMac display off??

잠자기??

네트웍이 끈어 지더라...

퇴근 할때 모니터를 끄고 가고 싶은데...

iMac 은 버튼이 어디 있지 모니터를 어찌 끄지??

System 환경 설정 에서 아무리 키보드 단축키 를 찾아도 없다.


http://www.danrodney.com/mac/

단축키가 잘 정리된 싸이트다.

유심히 보니 있다.

Shutdown/Sleep Commands

ActionKeystroke
Shutdown immediately (no confirmation)Cmd-Opt-Ctrl-Eject
Sleep immediately (no confirmation)Cmd-Opt-Eject
Restart, Sleep, Shutdown dialog (like hitting the Power button on old Mac keyboards)Ctrl-Eject
Put display to sleepCtrl-Shift-Eject

조심 해서 눌러야지 잘못 하면 잠자기로 ... 네트웍 끊어 질라...

여튼 내가 원하는건

Ctrl+Shift+Eject

NULL to strlen() function ??

cat test.c
#include
#include
int main(void)
{
char * p;
p = NULL;
printf("%d\n",strlen(p));
}


$ gcc -o test test.c
$ ./test
세그멘테이션 오류 (core dumped)

NULL 은 문자열이 아니다.

그러니 쓰면 안되겟지만...

0을 리턴 할거 같은 기대감은 버리자..

2010년 10월 20일 수요일

vmware parallels virtualBox on iMac

ubuntu 에서 virtual box 를 잘쓰고 있었다.
open 소스 virtualbox에 장점이라면 여러 플렛폼 지원??

M$ Windows에서 linux에서 그리고 osx에서 모두 다 사용이 가능하다.

거기에 ovf 포멧으로 가상 머신을 export 할 수 있다.

그럼 여기서 ovf 포멧으로 export됫으니 이게 osx에서 parallels에서 되는가??

안되 더라.

ubuntu virtualbox에서 osx virtualbox로 에 이사는 가능 했다.

그럼 vmware fusion 이 해결 책인가

설치 해보지 않아서 알수가 없다.

parallels를 쓰고 싶으면 걍 다시 설치 해야 하는건가??
정말 virtualBox보다 빠르긴 한건가??

그냥 현재는 osx에 virtualBox를 이용한다.

사족:
virtual Box는 이보다 성능이 좀 안좋은 T61 ubuntu 머신에서 보다 아주 쾌적한 성능을 보인다.
하지만 Seamless모드가 안되는것 같다.




2010년 10월 14일 목요일

iMac 2.4inch core2duo2.8 3days 사용기


회사 옆자리 아자씨가 두구간 iMac
내가 쓰고 싶어서 싸바 싸바 햇는데... 일단 보류라고...
그래도 걍 써볼라고..

thinkpad T61 ubuntu 10.10 64bit 에서 낼름 도망 나와서 iMac에 또아리를 틀었음

일단 새로운것에 대한 호기심 때문에 매우만족

크롬 브라우저, 터미날, VirtualBox, 요렇게 하면 회사일은 할수 있음
어짜피 개발은 터미날에서 다하니까...

코드 탐색은 VBox에서 소스인사이트로...

iMac 27inch 에서 command 키 때문에 포기한 사람도 잇는데..

난 별로 못느낌

unix style copy ( 마우스 드래그 로 복사 휠버튼으로 붙여넣기) 요기능이 좀 아쉽지만
가끔 ctrl + c , ctrl + v 를 계속 누르고 있기도 하지만

osx command 버튼 조합도 왜우니 재미 있고

키보드도 쫀득 쫀득 하니.. 좋다.

이제 3일째..

지금 ubuntu Virtual Box 에서 ovf로 내보내기 해서 osx Virtual Box에서 임포트 했는데..

parallels 6 desktop으로 마이그레이션이 가능한지 알아 보는중..

아직 잘 모르겟음...

10.4 타이거 해킨 에서 10.5.8 레오파드 해킨
스노우 레오파드 해킨 실패 이후 걍 동경에 대상이던 리얼맥....

좀 지난 머신이지만 아주 만족..

270만원이면 27인치 쿼드 코어 iMac
지름신이 오다가 와이프신에게 마자 죽었음.

2010년 10월 11일 월요일

ubuntu 10.10 upgrage now!

ubuntu 10.04 64bit --> ubuntu 10.10 upgrade

잘동작 하는것 같다.

업그레이드를 해서 기존에 쓰던것 그대로 유지 되어

아직 차이점을 잘 모르겠다.

눈에 띄는건 타이틀 바가 진한 주황

remote 서버에 ssh로 접속 해서 ddd로 디버깅 할때

마우스 오른쪽 click 할경우 ddd가 얼어 버리는 버그가 해결된거 같다.

그거 하나만으로도 매우 만족

2010년 10월 9일 토요일

bluetooth mouse 이용시 멀티부팅을 하면.

오랫만에 osx 10.5.8 leopard 로 부팅 해보았다.
설치만 해놓고 사용하지도 않는 해킨
사용방법을 전혀 몰랏던 해킨.. 오늘에서야 cmd + q cmd+w cmd + n 등의 단축키를 알게 되서.
근데.. 최근에 바꾼 마우스가 bluetooth 마우스다.
당연히 처음 띄운 osx가 마우스에 존재를 알턱이 없다.
어렵게 mac osx사용법을 잘 몰라서..
bluetooth장비를 인식 해줫다.
잘된다.
Microsoft Bluetooth Notebook Mouse 5000
깜직하게 동작 한다.
osx 놀이를 끝내고
원래대로 윈칠이 부팅....
앗 .. 마우스가 안된다.
BT 장비에 있는데도 모른다...
다시 찾아 주었다.

bluetooth mouse를 사용 할때 멀티 부팅을 하면 항상 인식 시켜줘야 하나??
다시 ubuntu로 부팅 해서 확인 해보아야 하나...??

아니면 한번씩 인식 시켜 놓으면 끝인가??

아마도 새로 인식 시킬때만다. 윈칠이로 다시 부팅 하면
다시 패어링을 해야 할듯 ...

2010년 9월 29일 수요일

ubuntu에서 노트북으로 무선 공유기 만들기

윈도우 OS 인터넷 쉐어링을 하면 무선 공유기 처럼 쓸수 있다.

ubuntu에서도 같은 방법을 하면 되는데.

UI가 어찌 해야 하는지 난감 했다.

연결 정보를 보여주는 패널

네트워크 관리자 애플릿 0.8 (ubuntu 10.04 64bit)
이넘이 보인다면 마우스를 클릭 했을때 하단 메뉴가

새 무선 네트워크 만들기

무선 보안을 설정 하지 않고 none으로 해서 하나 만들면
그냥 되버린다.

무선 보안에 설정을 해보니 아이폰에서 접속했을때 아이피를 169.~~~

none로 해야 되는데... 이건 나만의 문제 일지도...