• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

소프트웨어

[App 개발] OS X 를 지원하지 않는 기종을 위한 커널 해킹 (7)

본문

플랫폼 엑스퍼트는 IODTNVRAM 인스턴스를 new 구문으로 직접 생성하고 있으므로 둘은 강하게 연결되어 있습니다. /options 노드는 연결 과정에 참여하고 있지 않고 있으며, 따라서 IODTNVRAM 을 대체할 드라이버를 제공하는 쉬운 방법이 없었습니다.

이 문제를 해결하는 한 가지 방법은 플랫폼 엑스퍼트의 서브클래스를 만들어서 processTopLevel 을 상속한 다음 다른 드라이버를 생성하게끔 하는 것입니다. 하지만 이 방법에는 문제가 있었습니다. 먼저 dtNVRAM 멤버 변수가 private 로 선언되어 있다는 점이었습니다. dtNVRAM 변수는 다른 IODTPlatformExpert 멤버들이 참조하고 있었으므로 이 변수에 그냥 NULL 로 방치해 둘 수 없었습니다. 따라서 IODTNVRAM 의 서브클래스를 만든 다음 이것을 dtNVRAM 변수에 저장해야 했습니다.

IODTPlatformExpert.h 헤더를 변경하여 dtNVRAM 을 private 에서 protected 로 만들 수도 (아니면 제 서브클래스를 friend 로 만들 수도) 있었습니다. 하지만 서브클래스를 만드는 데에는 근본적인 문제들이 있었습니다. IODTNVRAM 은 Mac OS X 버젼별로 변경되어 왔으며, 원래 헤더에 어떠한 예약된 자리도 없이 계속 멤버 변수들과 가상 함수들이 추가되어 왔습니다. 따라서 모든 Mac OS X 버젼에 대응하는 IODTNVRAM 서브클래스를 작성할 수 없었고, 다른 대안이 없지 않는 한 버젼별로 따로따로 드라이버를 작성하는 것을 저는 선호하지 않았습니다.

IODTNVRAM 서브클래스를 만드는 대신, dtNVRAM 멤버 변수를 참조하는 IODTPlatformExpert 클래스의 모든 멤버들을 오버라이드 할 수도 있었습니다. 하지만 dtNVRAM 을 사용하는 IODTPlatformExpert 메쏘드 중 몇 가지는 virtual 로 선언되어 있지 않았습니다. public/protected/private 문제와 달리, 이것은 헤더를 변경하는 것만으로 해결되지 않았습니다. 메쏘드가 vtable 에 없다면 IODTPlatformExpert 의 서브클래스에서 오버라이드할 방법이 없었습니다.

여기서 완전히 막혀버렸습니다. 이 부분은 드라이버의 기본 방식을 따르고 있지 않았기 때문에 제가 원하는 기능을 넣을 수 있는 자리를 찾을 수가 없었습니다.

하지만 저는 하드웨어 버퍼를 읽고 쓰는 완전한 권한을 가지고 있었습니다. 이 부분은 제가 만들었던 PatchedAppleNVRAM 이 역할을 수행하고 있었습니다. 따라서 구 기종에서 신 기종 NVRAM 을 흉내내도록 PatchedAppleNVRAM 을 작성하는 방법을 생각해 냈습니다. 일반적으로 PatchedAppleNVRAM 은 실제 NVRAM 구조를 이해할 필요가 없고, 단순히 IODTNVRAM 에서 마련된 버퍼를 읽고 쓰는 역할일 뿐입니다. 하지만 필요하면 PatchedAppleNVRAM 에서 NVRAM 구조를 이해하여 구 기종과 신 기종간의 NVRAM 구조를 실시간으로 변경하도록 만들 수 있었습니다. 근본적으로 이 작업은 하드웨어로부터 구 기종의 데이터를 읽어서 버퍼에 신 기종의 구조로 변경하여 저장하고, 반대로 신 기종 구조로 씌어진 버퍼를 읽어서 구 기종 구조로 변경하여 하드웨어에 저장하는 일이었습니다. 이렇게 하면 IODTNVRAM 은 신 기종으로 인식하지만, 실제로 하드웨어에는 구 기종의 데이터 구조로 저장됩니다.

문제가 간단하다는 것만 제외하면 PatchedAppleNVRAM 을 가로채는 것은 좋은 일이 아닙니다. 논리적으로 따지면 IODTNVRAM 이나 IODTPlatformExpert 를 가로채야먄 하지요. 하지만 PatchedAppleNVRAM 이 시스템 기본 방식을 잘 따르고 있기 때문에 이것을 가로채는 것이 더 실용적이었습니다.

하지만 한 가지 문제가 남아있었습니다. 모든 미 지원 기종이 PatchedAppleNVRAM 을 사용하고 있는 것은 아니라는 점을 잊고 있었습니다. PMU 방식 기종들은 NVRAM 을 읽고쓰기 위하여 ApplePMUNVRAMController 를 사용하고 있었습니다. 따라서 이 기종들에게는 PatchedAppleNVRAM 이 도움이 되지 않았습니다. 이 부분이 논리적인 면에서 제가 잘못된 부분을 가로채고 있다는 뜻이었습니다. 만약 IODTNVRAM 이나 IODTPlatformExpert 를 가로챘더라면 PMU 기종에서도 동시에 문제가 해결되었을 테지요.

따라서 PatchedAppleNVRAM 으로 대체했던 것처럼 ApplePMUNVRAMController 를 제 드라이버로 바꿔 주어야 했습니다. 코드 작성은 어렵지 않았습니다만, 시스템이 제 드라이버를 사용하도록 하는 것이 약간 까다로웠습니다. 왜냐하면 이 경우에도 기본 방식을 잘 따르고 있지 않았기 때문이었습니다. PMU NVRAM 드라이버도 기본 연결 과정을 이용하지 않고 IODTNVRAM 드라이버 경우처럼 인스턴스를 생성하는 객체 (여기서는 ApplePMU) 와 단단히 연결되어 있었습니다. 앞에서 말씀드린 것처럼 저는 ApplePMU 드라이버의 최신 버젼 소스코드가 없었습니다. 하지만 옛날 버젼에서는 NVRAM 컨트롤러를 다음 방식으로 생성하고 있었습니다.

bool ApplePMU::allocateInterfaces()
{

// gets the provider (which property we should look at):
IOService *myProvider = getProvider();
// Do not create the OpenPMUNVRAMController if the
// no-nvram property is set.
if (!myProvider->getProperty("no-nvram")) {
ourNVRAMinterface = new ApplePMUNVRAMController;
if (ourNVRAMinterface != NULL) {
if (ourNVRAMinterface->init(0,this) &&
ourNVRAMinterface->attach(this) &&
ourNVRAMinterface->start(this)) {


Listing 15. Another example of how not to instantiate a driver

ApplePMU 클래스는 연결 과정에서 사용되는 nub 으로 생성되지 않고 직접 생성되고 있었으므로, ApplePMU 클래스와 ApplePMUNVRAMController 는 단단히 연결되어 있었습니다.

몇몇 기종에 대하여 저는 ApplePMU 대신 OpenPMU 로 대체해 주었으므로, 이런 경우 문제는 쉽게 해결될 수 있었습니다. 하지만, ApplePMU 는 더 이상 오픈 소스가 아니었고, 제가 무엇인가 빠뜨린 것도 있을 수 있었으므로, ApplePMU 가 정상 작동되는 컴퓨터에서도 OpenPMU 로 대체하고 싶지는 않았습니다.

다행히도 ApplePMU 와 ApplePMUNVRAMController 의 경우는 간단하게 분리할 수 있었습니다. 인스턴스가 ourNVRAMInterface 가 사용되는 경우는 드라이버를 삭제하려는 경우 뿐입니다. ApplePMU 다른 곳에서는 사용되고 있지 않았으므로 ourNVRAMInterface 를 NULL 로 놓아둘 수 있었습니다. 게다가 ApplePMU 클래스는 제공자의 "no-nvram" 프로퍼티를 확인하고 있었습니다. 따라서 제공자가 나타나서 no-nvram 프로퍼티를 설정하는지를 기다리도록 클래스를 작성하였습니다. 그렇다면 ApplePMU 는 ApplePMUNVRAMController 의 인스턴스를 생성하지 않고, 다른 드라이버를 생성하여 붙여줄 것입니다. 이 경우 기본 방식의 일부라도 지켜지고 있었기 때문에 큰 어려움 없이 가로채기를 할 수 있었습니다.

- 결론

Mac OS X 를 미 지원 기종에서 동작하게 하는 작업은 해당 하드웨어에 필요한 장치 드라이버를 제공하는 작업이었습니다. 그리고 애플이 제공하는 커널 및 커널 익스텐션을 수정해 주어야 하는 문제도 다소 있었습니다. 이 작업에 동원된 기술들은 Mac OS X 의 드라이버 모델의 유연성과 정교함 및 가능한 한 기본 방식을 준수한 지혜를 나타내고 있었습니다.
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 228,692
가입일 :
2003-02-18 14:12:30
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 1

hongjuny님의 댓글

인텔 맥으로 넘어오면서 이제 더 이상 G3 이하 구 기종에 대한 서포트라는 과제는 관심에서 멀어져 가고 있습니다만, XPostFacto 를 설계한 Ryan Rempel 의 문서는 Mac OS X 커널의 구성 및 커널 익스텐션 제작에 관심이 있으신 분들에게 많은 도움이 될 것이라 생각합니다.

전체 121 건 - 1 페이지
2007.01
27

[App 개발] OpenCV 1.0.0 Frameworks

wlee 님 뿐만 아니라 Mac 에서 이미지 프로세싱 관련 연구를 하시는 분들에게 유용한 툴이 될 듯 싶습니다. 좋은 라이브러리를 알게 되어 wlee 님께 감사말씀 드립니다. ^^ 물론 1.0.0 을 그대로 command-line 으로 컴파일해도…

2006.08
22

[App 개발] 마유라 는 한글이 잘 되는군요. ^^

InputStreamReader 의 속성을 SJIS 에서 EUC-KR 로 바꾸는 방법으로 미와 고스트는 안되는데 마유라 고스트는 잘 되는군요. 인텔 맥에서도 문제없이 돌아가고 있습니다. 영환님도 이미 컴파일 해보셨겠지만, 안되었으면 한 번 …

2005.12
19

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (3)

이번에는 본격적으로 Quartz 의 Core Graphics 를 이용해서 그림을 그려 보겠습니다. 참고 자료로는 애플 홈페이지에서 다운로드 받으실 수 있는 Quartz 2D Programming Guide 입니다. 프로그램의 기본 구조는 이…

2005.12
17

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (2)

윈도우 프로그래밍을 처음 공부한ㄴ 사람들이 한결같이 내놓는 불만은 "왜 이렇게 어렵냐" 라는 것입니다. 막말로, C 에서는 printf("Hello World\\n") ; 요거 하나만 하면 글을 볼 수 있는데, 윈도우에서는 글자 하나를 보…

2005.12
16

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (1)

Xcode 새 버젼의 카본 어플리케이션 템플릿이 좀 더 친절해졌더군요. 한편, 지금까지 자기 고유의 이벤트 핸들러를 갖고 계시던 분들에게는 더 힘들어 졌더군요. ㅠㅠ 자 해 봅시다. 일단. Xcode 를 실행하고, File->N…

2009.10
22

[App 개발] GCD 예제

MacTech 10 월호에 게재된 GCD 예제를 번역하였습니다. 허락 없는 번역이므로 다른 곳에 퍼 가지 마세요. -_-; *** Grand Central Dispatch Grand Central Dispatch (GCD) 는 개발자들…

2009.09
24

[App 개발] OpenCL 프로그래밍 예제

개인 블로그에 차곡차곡 올리는 도중, 그래도 혹시나 쓸모가 있을 법한 아이를 하나 이곳에 분양하려 합니다. 아직 제 지식과 기술이 일천하여 완전히 최고 속도를 내지는 못하지만, 그래도 공부에는 도움이 될만한 소스가 아닐까 싶습니다. Bili…

2009.09
10

[App 개발] OpenCL 프로그래밍 도중 문제가 생기면...

2차원 Wavelet decomposition 루틴을 작성하기 위해 열심히 노력중에 있습니다. 아직 손에 익지 않은 기술이고, 예제가 많지 않은 기술이라, 매뉴얼 한 권에 의지하여 더듬더듬 나아가고 있습니다. 그런데 정말 신기한 현상을 보게 되었…

2009.08
27

[App 개발] CUDA, Supercomputing for the Masses (8)

- CUDA 와 라이브러리 사용 지난 회에서는 차세대 CUDA 하드웨어를 살펴보았습니다. 이번에는 하드웨어에서 소프트웨어로 주제를 약간 바꾸어서 CUDA 에서 라이브러리를 사용하는 것을 살펴보겠습니다. 최적화된 라이브러리는 응용프로그램의 성…

2009.08
26

[App 개발] CUDA, Supercomputing for the Masses (7)

- 차세대 CUDA 하드웨어 활용하기 6 장에서 CUDA 프로파일러를 이용하여 글로벌 메모리를 확인해 보았습니다. 이번에는 차세대 CUDA 하드웨어에 대해 살펴보려 합니다. CUDA 와 CUDA 지원 장치는 세대를 거듭할수록 더 향상된 성능…

2007.01
27

[App 개발] OpenCV 1.0.0 Frameworks

wlee 님 뿐만 아니라 Mac 에서 이미지 프로세싱 관련 연구를 하시는 분들에게 유용한 툴이 될 듯 싶습니다. 좋은 라이브러리를 알게 되어 wlee 님께 감사말씀 드립니다. ^^ 물론 1.0.0 을 그대로 command-line 으로 컴파일해도…

2006.08
22

[App 개발] 마유라 는 한글이 잘 되는군요. ^^

InputStreamReader 의 속성을 SJIS 에서 EUC-KR 로 바꾸는 방법으로 미와 고스트는 안되는데 마유라 고스트는 잘 되는군요. 인텔 맥에서도 문제없이 돌아가고 있습니다. 영환님도 이미 컴파일 해보셨겠지만, 안되었으면 한 번 …

2005.12
19

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (3)

이번에는 본격적으로 Quartz 의 Core Graphics 를 이용해서 그림을 그려 보겠습니다. 참고 자료로는 애플 홈페이지에서 다운로드 받으실 수 있는 Quartz 2D Programming Guide 입니다. 프로그램의 기본 구조는 이…

2005.12
17

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (2)

윈도우 프로그래밍을 처음 공부한ㄴ 사람들이 한결같이 내놓는 불만은 "왜 이렇게 어렵냐" 라는 것입니다. 막말로, C 에서는 printf("Hello World\\n") ; 요거 하나만 하면 글을 볼 수 있는데, 윈도우에서는 글자 하나를 보…

2005.12
16

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (1)

Xcode 새 버젼의 카본 어플리케이션 템플릿이 좀 더 친절해졌더군요. 한편, 지금까지 자기 고유의 이벤트 핸들러를 갖고 계시던 분들에게는 더 힘들어 졌더군요. ㅠㅠ 자 해 봅시다. 일단. Xcode 를 실행하고, File->N…

2009.08
25

[App 개발] OpenCL: democracy for GPU computing?

OpenCL: GPU 프로그램의 민주주의인가 by Damien Triolet March 19, 2009 OpenCL 개발 실무진이 꾸려진 지 6 개월 후 Khronos 라는 이름으로 출범하게 되었습니다. 아시는 것처럼 OpenCL (Open …

2009.08
22

[App 개발] Introductory Tutorial to OpenCL

Introductory Tutorial to OpenCL Skip Navigation LinksHome > GPU Tools > ATI Stream SDK > Introductory Tutorial to OpenCL Benedict R. Gas…

2009.08
21

[App 개발] CUDA, Supercomputing for the Masses (6)

- 광역 메모리와 CUDA 프로파일러 이번 6회에서는 메모리 성능과 reverseArray_multiblock_fast.cu 에서 공유 메모리를 사용하는 것을 살펴보겠습니다. 이번에는 CUDA 프로파일러를 이용하여 광역 메모리를 점검할 것입니다.…

2009.08
20

[App 개발] CUDA, Supercomputing for the Masses (5)

- 공유 메모리의 이해 (2) 지난 4회에서 실행 모델과 커널 실행 환경 설정이 레지스터의 갯수와 공유 메모리같은 지역 멀티프로세서 자원에 영향을 미치는지 살펴보았습니다. 이번에는 메모리 성능과 reverseArray_multiblock_fast…

2009.08
19

[App 개발] CUDA, Supercomputing for the Masses (4)

- 공유 메모리 사용법 CUDA 개발자에게 성능 향상의 관건은 공유 메모리, 상수 메모리, 레지스터 등의 프로세서 지역 메모리를 효율적으로 사용하는 것입니다. 앞 장에서 살펴본 것처럼, 전역 메모리 밴드폭이 60GB/s 라고 하지만, 실제 부동소…

2009.08
18

[App 개발] CUDA, Supercomputing for the Masses (3)

- 오류처리와 전역 메모리 성능 한계 축하합니다! CUDA 시리즈의 1편과 2편을 마치신 여러분은 CUDA 프로그래머가 되어서 이제 여러분은 CUDA 장치가 지원하는 수백 개의 병렬 쓰레드를 이용한 프로그램을 개발할 능력을 갖추셨습니다. 2편에 …

2009.08
17

[App 개발] CUDA, Supercomputing for the Masses (2)

지난 1편에서는 첫 번째 CUDA 예제 moveArray.cu 를 소개하면서 CUDA 툴을 이용하여 프로그램을 만들고 실행하는 것을 연습하였습니다. C 프로그래머에게 그 프로그램은 단순히 CUDA API 를 호출하여 메모리를 할당하여 CUDA 장비와 …

2009.08
16

[App 개발] CUDA, Supercomputing for the Masses (1)

CUDA, Supercomputing for the Masses Rob Farber April 15, 2008 CUDA 는 GPU 상에서 동작하는 소프트웨어를 쉽게 개발하는 기법을 제공합니다. C 와 같은 고급언어를 사용하면서도 멀티코어…

2009.08
15

[App 개발] Mac OS X 커널의 내부 (3)

- 인텔 프로세서 관련 XNU 가 i386 을 지원하기 시작한 것은 90 년대 중반 OpenStep 으로 판매되기 시작할 때부터이지만, Mac OS X 에 적용된 것은 애플이 인텔 프로세서를 채택한 2005/2006 년도부터입니다. 그리고 64 …

2009.08
14

[App 개발] Mac OS X 커널의 내부 (2)

- 아키텍쳐 "XNU" (X is Not Unix) 라는 이름의 Mac OS X 의 커널은 세 가지 요소 (Mach, BSD, I/O-Kit) 로 구성되어 있습니다. - Mach (GNU/HURD 를 제외하고) 아직까지 Mach 코드를…

2009.08
13

[App 개발] Mac OS X 커널의 내부 (1)

Mac OS X 커널의 내부 Mac OS X 에는 마하 커널, 마이크로 커널, FreeBSD 커널, C++, 64 비트, 유닉스,... 그리고 이 모든 것이 포함된 "XNU" 등 여러 전문용어가 담겨있습니다. Mac OS X 커널은 마하 커널도,…

2009.08
12

열람중 [App 개발] OS X 를 지원하지 않는 기종을 위한 커널 해킹 (7)

플랫폼 엑스퍼트는 IODTNVRAM 인스턴스를 new 구문으로 직접 생성하고 있으므로 둘은 강하게 연결되어 있습니다. /options 노드는 연결 과정에 참여하고 있지 않고 있으며, 따라서 IODTNVRAM 을 대체할 드라이버를 제공하는 쉬운 방법이 …

2009.08
11

[App 개발] OS X 를 지원하지 않는 기종을 위한 커널 해킹 (6)

- 프로퍼티 조정: 약간의 거짓말이 필요할 때 멤버 변수 외에도 Mac OS X 드라이버에는 IOService (모든 Mac OS X 드라이버의 수퍼클래스) 로부터 상속받은 프로퍼티 테이블을 가지고 있습니다. 프로퍼티를 억세스하는 멤버는 퍼블릭이…

2009.08
09

[App 개발] OS X 를 지원하지 않는 기종을 위한 커널 해킹 (5)

- Mac OS X 업데이트 문제: 오묘한 커널의 세계 기존 드라이버에서 서브클래스를 만들어 우회하는 기법의 가장 큰 장점은 애플이 Mac OS X 를 업데이트 하더라도 커널 익스텐션을 계속 사용할 수 있다는 점입니다. 애플이 제공하는 드라이버를…

2009.08
08

[App 개발] OS X 를 지원하지 않는 기종을 위한 커널 해킹 (4)

- 애플 드라이버 서브클래싱: CD-ROM 충돌이 일어난 경우 Mac OS X 정품을 미 지원 시스템에 설치하는 또 다른 어려운 과제가 바로 스커지 CD-ROM 장치에 CD 를 넣을 경우 시스템 패닉이 일어난다는 점입니다. 이것은 좀 어려운 문제…

2009.08
07

[App 개발] OS X 를 지원하지 않는 기종을 위한 커널 해킹 (3)

- 부팅 과정 따라가기: 정품 인스톨 CD 부팅 PatchedNVRAM.kext 뿐만 아니라 여러 개의 드라이버들을 고치거나 새로 만들어야 합니다. 대략 45,000 줄의 코드 분량의, 모두 30개의 커널 익스텐션을 손보아야 합니다. 미 지…

2009.08
06

[App 개발] OS X 를 지원하지 않는 기종을 위한 커널 해킹 (2)

... 수정된 코드를 PatchedAppleNVRAM 으로 컴파일하는 것은 어렵지 않았습니다. AppleNVRAM 클래스는 짧고 간결했기 때문에, 코드를 복사한 다음 수정해야 할 두 줄만 고쳐 주었습니다. 이제 어떻게 커널이 내 드라이버를 선택하…

2009.08
05

[App 개발] OS X 를 지원하지 않는 기종을 위한 커널 해킹 (1)

OS X 를 지원하지 않는 기종을 위한 커널 해킹 Ryan Rempel (Other World Computing) - 요약 OS X 가 더 이상 지원하지 않는 기종에서 OS X 를 사용하기 위해서는 커널과 몇 가지 IOKit 익스텐션을 변경해…

2009.02
16

[App 개발] SSE 최적화 (0) 서

맥이 인텔 프로세서를 사용한 지 어언 수 년이 흐르고, 이제 자연스럽게 인텔 프로세서의 장점을 십분 활용하는 방법을 강구하여야 하겠습니다. 예전에 제가 본 게시판에 게재했던 '코드 최적화' 글들을 같이 참조하시면 도움이 되실 것입니다. 대장…

2008.10
14

[App 개발] NSImage 를 비트맵으로 처리하는 방법

제가 아까 잠결에 본 질문글이 있었는데, 다시 자고나서 일어나보니 지우셨나봐요. 질문 내용을 정확히 이해하지 못하고 그냥 얼핏 보았는데, 대략 "NSImage" 객체에서 raw 비트맵 정보를 끄집어내서 작업하고 싶어하시는 것 같던데, 맞나요 …

2007.08
18

[App 개발] 오목 게임 (소스포함)

어떤 분의 요청에 의해 오목게임에 착수한 지 일주일만에 이런 엄청난 게임 -_-;;; 을 만들 수 있다니... 저의 재능에 스스로 놀라면서 (우웩~ -0-;) 카본과 쿼츠 2D 로 만든 초간단 오목 게임입니다. 상당히 멍청한 알고리듬을 탑재하고 …

2007.01
27

[App 개발] OpenCV 1.0.0 Frameworks

wlee 님 뿐만 아니라 Mac 에서 이미지 프로세싱 관련 연구를 하시는 분들에게 유용한 툴이 될 듯 싶습니다. 좋은 라이브러리를 알게 되어 wlee 님께 감사말씀 드립니다. ^^ 물론 1.0.0 을 그대로 command-line 으로 컴파일해도…

2006.11
05

[App 개발] iCal 에 음력 날짜를 출력하자

"한국 달력" 위젯으로 음력 날짜를 확인하셔도 되긴 합니다만, 이왕이면 iCal 에 음력 날짜를 표시해 두면 일정 관리 및 어르신, 친지, 친구 생일 등을 한 프로그램에서 할 수 있으니 편하겠지요 지난번에 iCal 의 파일 포맷을 읽어들이는 루틴…

2006.08
26

[App 개발] iCal 의 데이터를 읽어들이는 초간단 Java 소스

최종 목표는 가짜사과 입니다만 -_-; 혹시나 이런 허접한 소스라도 필요하신 분이 있지 않을까 싶어서 이렇게 올립니다. 눈여겨 보실 클래스는 iCalReader 이고요, iCal 의 데이터를 읽어들이는 루틴을 짧게 구현한 것입니다. O'Re…

2006.08
25

[App 개발] 가짜사과에 내장된 카와리 7 모듈

오늘도 일하다가 몰래 소스를 좀 봤습니다. -_-; 이러다 짤리는걸까 SHIORI Kernels 디렉토리에 있는 SCKawari*.java 가 바로 문제의 "카와리 7" 의 Java 클론이라는데 대충 이렇게 저렇게 살펴보니 대략 세 가지 모…

2006.08
24

[App 개발] 혹시 shioribox 에 관한 정보가 있으면

JNI 에서 시오리 커널을 호출하는 기능 (어떤 설명에서는 커맨드 라인에서도 구동이 가능하다고 하더군요) 을 담당하는 shioribox 모듈에 관한 정보가 좀 더 필요한데, 혹시 찾으신 것 있으면 알려주세요. 이제 Kawari 8 모듈은 거의 다…

2006.08
22

[App 개발] 마유라 는 한글이 잘 되는군요. ^^

InputStreamReader 의 속성을 SJIS 에서 EUC-KR 로 바꾸는 방법으로 미와 고스트는 안되는데 마유라 고스트는 잘 되는군요. 인텔 맥에서도 문제없이 돌아가고 있습니다. 영환님도 이미 컴파일 해보셨겠지만, 안되었으면 한 번 …

2006.08
22

[App 개발] 니세링고 한글 입력

자바의 BufferedReader 메쏘드를 이용해서 딕셔너리를 읽어들이는 것으로 생각이 되는데 그래서 BufferedReader 를 생성할 때 만드는 InputStreamReader 에 코드를 SJIS 에서 EUC-KR 이나 MS949 로 변경해…

2006.08
21

[App 개발] 나니카 실행 성공

설명에 나온 그대로였어요. 영환님. ㅎㅎ 그런데, 되는 고스트가 있고 안 되는 고스트가 있네... -_-;

2006.08
11

[App 개발] MallocDebug

Xcode 와 CHUD 를 설치하면 여러 가지 Performance Tools 를 보게 됩니다. 그 중에서 Shark 툴을 가장 빈번히 사용하게 되는데요, 이것은 일종의 profiling tool 입니다. 어떤 프로그램이 어떤 경로로 어떤 루틴을 수행…

2006.05
24

[App 개발] OpenGL 을 이용한 게임 만들기 (2) - 3D 모델

드디어 3D 의 세계로 입성하게 되었습니다. 게임 프로그래밍을 생각하시는 많은 분들이 일단 OpenGL 책부터 끄적끄적 하다가 그냥 덮게 되는것은, 어디서부터 손을 대어야 할지 모르기 때문이 아닐까 생각합니다. 일단 OpenGL 을 사용하기 위해서 습…

2006.05
18

[App 개발] OpenGL 을 이용한 게임 만들기 (1) - 2D 맵

앞으로 얼마나 진도를 나갈 수 있을지 저도 장담할 수 없는 시리즈의 첫 번째 편을 쓰게 됩니다. ㅡㅡ; Mac OS X 뿐만 아니라 여러 다양한 플랫폼에서 산업 표준으로 이용되고 있는 OpenGL 을 이용한 게임 제작이 한창입니다. MS 의 Di…

2006.03
23

[App 개발] GNU Scientific Library 를 Xcode 에서 컴파일하다

과학, 공학 전공하시는 분들이시라면, 선호하는 계산 라이브러리가 있으실 줄 압니다. 가장 간편하고 인기있는 라이브러리는 역시 Numerical Recipes 라이브러리가 되겠지만, 요즘은 GNU Scientific Library (GSL) 이 대세죠 …

2006.03
11

[App 개발] 인텔맥에 대처하는 우리의 자세 ㅡㅡ;

이미 작년 6월 이후부터 꾸준하게 유니버설 바이너리 관련 개발자 정보들이 나왔기 때문에 지금은 그 충격이 거의 상쇄되어 버린 기분입니다. 그리고 새로 출시된 인텔 아이맥과 맥북 프로의 성능이 기존 제품을 훨씬 능가한다는 사실을 보면서 많은 개발자들이 …