[SpiderMonkey] 다운로드 및 컴파일 방법

IT/일반 2011/05/10 23:42 Posted by Gony Taegony
제품 내부에 embeded시켜 사용가능한 JavaScript 엔진이 필요하여 찾아보던 중 Mozilla 재단의 SpiderMonkey 라고 하는 오픈 소스를 컴파일해서 사용해 봤다. 혹시 필요하신 분들 참고 하시길~ 

1. Mozilla Build Tool  (Mozilla 에서 제공한 별도의 컴파일 환경이 필요하다.)
   https://developer.mozilla.org/En/Developer_Guide/Build_Instructions/Windows_Prerequisites#Microsoft_Visual_C.2b.2b_(MSVC)

2. NSPR 소스 다운로드
    JavaScript를 Multi-Thread 환경에서 쓸 경우가 아니라면 사용할 필요가 없다. 
    http://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.8.7/src/nspr-4.8.7.tar.gz
3. SpiderMonkey 소스 다운로드
    https://developer.mozilla.org/En/SpiderMonkey/1.8.5

4. NSPR compile (Mozill Build에서 제공한 MinGW를 사용한다.)

    mkdir build-release
    ../configure --disable-debug --enable-optimize --enable-win32-target=WIN95
    make
5. SpiderMonkey 1.8.5 compile with NSPR  (Mozill Build에서 제공한 MinGW를 사용한다.)
    : 아래 파일 경로는  실제 파일 경로이다. 자기가 실제로 설정한 경로를 넣어주면 된다.

    mkdir build-release
    ../configure --disable-debug --enable-optimize --enable-win32-target=WINNT --enable-ctypes --enable-threadsafe \
                         --with-nspr-cflags="-I \
                           D:\project\Library\mozilla\nsprpub\build-release\dist\include\nspr" \
                        --with-nspr-libs=" \
                           D:\project\Library\mozilla\nsprpub\build-release\dist\lib\nspr4.lib \

                           D:\project\Library\mozilla\nsprpub\build-release\dist\lib\plds4.lib \

                           D:\project\Library\mozilla\nsprpub\build-release\dist\lib\plc4.lib"

[WinDbg] 1장 WinDbg에 대하여

IT 2010/01/20 19:59 Posted by Gony Taegony

1WinDbg에 대하여

 

1.1주요기능

 

  a. 응용프로그램 디버깅 (유저모드 디버깅)

à 디버깅에 필요한 윈도우 내부 리소스 정보를 상세하게 제공

à 리소스 조작하는 기능도 제공

 

b. 커널모드 드라이버 디버깅 (커널모드 디버깅)

à 윈도우 커널을 직접 디버깅하는 기능

  : 커널 내부 구조를 조회 및 조작 가능

à 커널모드 드라이버를 디버깅하는 기능

 

c. 크래시 덤프 파일 분석

 

d. 윈도우 시스템 분석

à 윈도우 자체에 대한 많은 정보를 제공

à 윈도우 운영체제에 대한 분석

à 보안 프로그램을 위해 취약점을 분석하거나 보완하는 목적으로 사용 가능

 

e. 스크립트와 확장 DLL

à 스크립트 언어를 작성해 번거롭거나 반복적인 작업을 손쉽게 처리

à 디버깅 API를 이용해 별도의 확장 DLL을 제작 가능

 

f. 디버깅 도움말

 

1.2 용도

 

a. 개발자 : 개발 과정에서 사용하는 개발 도구

à 소스 파일과 심볼 파일만 복사하면 비주얼 스튜디오와 같은 소스레벨 디버깅 가능

à 커널모드 드라이버 개발은 통합 개발 환경이 없으므로 WinDbg가 필수요소

 

b. 테스트/기술지원 엔지니어 : 버그 분석하기 위한 도구

à 원인 파악 및 소스레벨 디버깅까지 수행해 소스코드의 문제점을 찾기도 가능

 

c. 해커/크래커 : 해킹이나 크래킹을 위해 사용되는 역공학 (Reverse Engineering)도구

à Disassembly 코드와 WinDbg 명령을 이용하여 소프트웨어 분석 가능

 

1.3 디버깅의 종류

 

a. 유저모드 디버깅

    : 유저모드에서 실행된 프로세스를 대상으로 디버깅하는 것

à 유저모드에서 실행 중인 응용프로그램 중 하나의 응용프로그램을 타겟으로 디버깅

à 대상

: 일반 응용프로그램, 서비스 응용프로그램, 문제가 발생했을 때 생성되는

메모리 덤프 파일

 

- 일반 응용프로그램

    : 일반 응용프로그램을 실행시키면서 디버깅

    : 비주얼 스튜디오에서 F5로 실행하면서 디버깅하는 것과 같은 방법

- 서비스 응용프로그램

      : 실행 중인 서비스 응용프로그램을 붙여서 Attach 디버깅을 수행

      : 일반 응용프로그램도 가능

    - 메모리 덤프 파일

      : 응용프로그램에 문제가 발생할 때 상태가 저장된 파일

 

b. 커널모드 디버깅

: 운영체제와 드라이버를 디버깅하는 것

à 유저모드와는 달리 운영체제와 드라이버들은 2GB라는 가상 메모리 공간에

   공존하고 있어 항상 서로의 메모리를 침범할 위험성을 내포

à 어떤 드라이버가 잘못해 운영체제 커널의 메모리를 깨뜨릴 경우 바로 블루스크린이 발생

à 대표적인 커널모드 디버깅 : DDK (Driver Development Kit)로 작성한 드라이버 디버깅

à 디버거가 드라이버에 연결돼 디버깅하는 것이 아니라 운영체제 자체에 연결돼

     커널모드 전체를 디버깅

 

1.4 라이브 디버깅과 덤프 디버깅

 

a. 라이브 디버깅

: 프로그램 동작 중 디버깅

à 유저모드 라이브 디버깅과 커널모드 라이브 디버깅으로 구분

 

b. 유저모드 라이브 디버깅

: 현재 PC에서 실행 중인 프로세스를 디버깅

à 작업 중인 PC에서 WinDbg를 실행해 현재 PC에서 실행 중인 프로세스를 디버깅

à 리모트 디버깅 기능

  : 디버깅할 PC에서는 WinDbg만 실행하고

   네트워크상의 PC에서 디버깅할 PC의 실행 중인 프로세스를 TCP/IP, PIPE로 연결해 디버깅

 

c. 커널모드 라이브 디버깅

:  실행 중인 운영체제와 커널모드 드라이버를 디버깅

à 리모트 디버깅만 가능

à 널모뎀 케이블 (시리얼 케이블), IEEE1394, USB2.0을 지원

à 느린 속도로 인해 한 대의 PC에서 디버깅을 하기 위해

     Virtual Machine, Local Kernel Debugging 기능을 사용

     Local Kernel Debugging은 제한적인 기능만 제공

 

1.5덤프 디버깅

: 덤프의 종류는 유저 덤프와 커널 덤프로 구분

 

a. 유저 덤프

: 유저모드에서 생성된 메모리 덤프 파일

: 미니 덤프와 전체 덤프가 존재

à 미니 덤프

  : 64KB 크기

  : 레지스터, 콜 스택, 프로세스 정보, 스레드 정보, 오류가 발생한 시점에 접근했던

메모리 일부만을 저장

: drwtsn32 실행 후 크래시 덤프 유형최소로 선택

  à 전체 덤프

    : 오류가 발생한 시점에 그 프로세스가 사용하고 있던 메모리를 모두 파일로 저장

    : drwtsn32 실행 후 크래시 덤프 유형전체로 선택

 

b. 커널 덤프

: 작은 메모리 덤프 (미니 덤프), 커널 메모리 덤프, 전체 메모리 덤프 가 존재

à 미니 덤프

  : 64KB 크기

: 레지스터, 콜 스택, 프로세스 정보, 스레드 정보, 오류가 발생한 시점에 접근했던

메모리 일부만을 저장

à 커널 메모리 덤프

  : 커널 메모리에 해당하는 영역만 저장

  : 보통 전체 메모리의 1/3 정도 크기로 생성 (1GB인 경우 300MB 정도가 생성)

à 전체 메모리 덤프

  : 오류가 발생한 시점에 메모리에 있던 내용을 모두 덤프 파일로 저장

   유저모드 메모리, 커널모드 메모리가 모두 고스란히 저장

 

1.6 WinDbg 디버깅 용어

à 디버거 (Debugger) : 디버깅을 하는 도구

à 디버기 (Debuggee) : 디버깅을 당하는 대상

à 블루스크린 (BSOD) : Blue Screen Of Death

à 버그체크 (BugCheck) 와 버그체크 번호

 : 커널에서 현재 동작 조건이 비정상이라고 판단했을 때 KeBugCheck () 함수를 호출하며

이 때 KeBugCheck로 넘어가는 파라미터 (에러 종류)가 버그체크 번호 (0x1 ~ 0xFF)

     : ) 0x50에러가 발생시 도움말에서 Bug Check 0x50으로 입력하여 에러 종류를 검색

 

1.7 디버그 심볼 파일

: 실행 파일을 빌드할 때 생성되는 디버그용 정보 파일

à 실행 파일 안에 존재하는 함수나 변수들의 이름과 위치, 소스 파일, 소스 라인 정보가 존재

à 비주얼 스튜디오에서 Release 모드로 디버깅을 할 수 없는 이유는 PDB 파일이 없기 때문

à 윈도우 버전마다 각기 다른 심볼파일이 필요

  : 각 심볼 패키지를 다운받아 설치

  : 웹 심볼을 이용

    - WinDbg에서 디버깅 중인 윈도우의 정보와 파일 정보를 심볼서버로 보내고

심볼 서버는 해당 윈도우 버전에 맞는 심볼 파일만을 WinDbg로 다운로드해줘서

정확한 심볼 파일을 사용할 수 있게 한다

- 파일이 필요해지는 첫 번째 시점에 다운로드

 

1.8 WinDbg 명령

: 일반 명령 (Debugger Commands),

메타 명령 (Meta Commands), 확장 명령 (Extension Commands)

 

a. 일반 명령 (Debugger Commands)

: 대부분의 디버거가 공통적으로 지원하는 디버깅 명령

   Ex) r – CPU 레지스터 상태, d – 메모리 내용, e – 메모리 내용 변경,

bp – 브레이크 포인트

à 일반 명령은 명령 앞에 ‘.’ ‘!’가 붙지 않고 그냥 단어 자체를 사용한다.

 

b. 메타 명령 (Meta Commands)

: 디버거 자체를 제어하는 명령

à 명령어는 ‘.’ 으로 시작

  Ex) .attach – 특정 프로세스에 붙여서 디버깅할 때 사용

  .cls – 창의 내용을 지울 때 사용

  .sympath – 심볼 경로 확인

  .relaod – 심볼 경로를 설정한 후에 WinDbg가 심볼을 다시 로드하게 할 때 사용

 

c. 확장 명령 (Extension Commands)

: 윈도우 운영체제에 종속적인 정보를 다루는 명령

 특정 정보를 자세히 보여주거나 해석해서 보여줘 디버깅을 편하게 도와주는 기능

à 명령어는 ‘!’로 시작

à 확장 명령은 별도의 DLL 파일로 존재

  도움말에서 원하는 명령을 찾으면 DLL 이라는 항목으로 어떤 DLL을 사용하고 있는지 확인

  Ex) !process – 현재 윈도우에서 실행 중인 모든 프로세스의 정보

 

1.9 명령줄 구분

 

à 유저모드

  0:000> _ : 처음 0은 프로세스 번호이고 000은 스레드 번호

à 커널모드

  Kd> _ : 단지 kd라고 표시돼 커널모드 디버깅이라는 사실만 표시

  0: kd> _ : 멀티 processor 인 경우 processor 번호가 표시

 

1.10 명령별 사용 조건 (도움말)

 

à 명령 도움말에서 Environment 항목에서 확인

  Ex) Modes : User mode, kernel mode

 Targets : Live, crash dump

 Platforms : All

à 확장명령 사용시 DLL 항목 확인

  Ex) Windows NT 4.0         Unavailable

      Windows 2000           Acpikd.dll

      Windows XP and later   Kdexts.dll

 

[출처 : WinDbg로 쉽게 배우는 Windows Debugging]

TAG WinDbg

Apple Magic Mouse

IT/일반 2009/10/28 11:01 Posted by Gony Taegony
처음에 맥북프로를 사용하면서 멀티터치패드가 상당히 마음에 들었다.
넓은 패드도 그렇고 멀티핑거 기능도 쓰임새가 아주 많았다.
하지만 아무래도 마우스를 완전히 대체하기엔 어쩔 수 없는 한계가 있는지라 마이티 마우스를 사용했다. 그런데 사용하다보니 마우스의 휠을 없애버리고 맥북프로의 멀티터치패드처럼 멀티핑거를 지원하면 좋겠다는 생각이 들었다.
그러면 쓰기는 더 편해질 것이고 휠이 없어지는 것이기 때문에 고장도 덜 발생할 것 같았다.
하나 더 얘기하자면 디자인도 더 깔끔해지고 말이쥐~
그런데 진짜로 나와버렸다.
매직 마우스~ 오~ 지름신이~ ^^;


DOM 간단 히스토리

IT/JavaScript 2009/10/14 11:49 Posted by Gony Taegony
1. Legacy DOM
   - 1996년 Netscape Communication Navigator 2.0 은 JavaScript를
     Internet Explorer 3.0 은 JScript (a part of JavaScript) 를 릴리즈 함.
   - 이 스트립트들은 제한된 detecting user-generated events 기능과 HTML 수정 기능을 제공함.
   - 이후 이를 DOM Level 0 라고 함.
   - 엑세스 할 수 있는 elements 가 제한됨.
   - Form, link, image elements 는 root document object로 시작하는
     계층적 이름 (hierarchical name)을 통해서만 접근이 가능함.
   - 계층적 이름 (hierarchical name)은 names 또는
      the sequential index of traversed elements 로 만들어짐.
      ex) names : document.formName.inputName
          index : document.forms [0].elements [0]
   - client side 의 form validation과 rollover 기능이 가능함.
2. Intermediate DOM
   - 1997년 Netscape Navigator, Internet Explorer 4.0 은 DHMTL 기능을 추가 지원함.
   - DHTML은 로딩된 HTML을 변경하는 기능 : Legacy DOM 을 확장
   - JScript 가 JavaScript 를 기반으로 되어 있기 때문에 큰 틀에서는 호환성
     (Largely Compatible)을 가짐에도 불구하고 DHTML DOM extension 이 벤더별로
     각각 개발됨으로 인해 서로 비호환성을 가지게 되었다.
   - 이 DOM 버전을 Intermediate DOM 이라고 한다.
   - Display 에 영향을 주는 CSS properties 를 다룰 수 있다.
   - Layer 라고 불리우는 new feature 에 접근할 수 있다.
     ex) Netscape : document.layers 로 접근
         Microsoft : document.all 로 접근
   - 이 후 후속 버전에서는 Intermediate DOM 에 대하여 Netscape 는 호환성을 포기,  
     Microsoft 는 backward compatibility 를 유지함.
3. Standardization
   - W3C (World Wide Web Consortium) 에서 주관함.
   - 1997년 ECMAScript 를 발표
     : JavaScript 와 JScript 는 cross-browser compatibility를 위해 ECMAScript 를 구현함.
     : 이 후 DOM 표준화를 진행함.
   - 1998년 DOM Level 1 을 발표
     : document 의 어떤 위치의 element 든 바꿀 수 있는 방법을 포함하여 전체적인
       HTML, XML 에 대한 complete medel 을 제안함.
     : 그러나 2000년 까지 표준을 따르지 않는 Netscape 4.x, Explorer 4.x 가 계속 사용됨.
   - 2000년 DOM Level 2 를 발표
     : getElementById, event model, XML Namesapces, CSS 등을 도입함.
   - 2004년 DOM Level 3 를 발표
     : XPath, keyboard event handling, interface for serializing document as XML 를
       추가 지원함.

출처 : wikipedia
TAG DOM

레오파드에서 root 권한 사용하기

IT/일반 2009/08/12 03:57 Posted by Gony Taegony
vim 에디터를 이용해서 /etc/bashrc 파일을 수정하려고 했더니 w! 명령도 먹히질 않았다.
그래서 sudo 명령을 써봤는데 패스워드를 물어본다.
그러고보니 난 root 권한 패스워드를 설정한 기억이 없는데 ... ^^;

그래서 찾아보니 root 계정은 기본적으로 가려져 있는 것으로 보였다.
이걸 활성화 시켜야 한다.
만약에 피치못할 사정으로 반드시 root 계정을 사용해야 한다면 아래와 같이 수행하면 된다.

사용자 삽입 이미지






이 후 권한 사용시 sudo -i 또는 sudo [수행할 명령]을 입력 후 설정한 패스워드를 넣어주면 된다.

[뱀발바닥]
사실 위에 보이는 캡쳐 화면을 만들어 올리는데도 시간이 좀 걸렸다.
기본적으로 화면 캡쳐를 하면 tiff 파일로 만들어지는데 이 놈이 웹에서는 보이질 않는다.
때문에 jpeg파일로 바꾸고 싶은데 방법을 찾질 못했다.
구글신에게 물어보니 automator라고 하는 어플을 소개해 주셨다.
기본적으로 존재하는 명령들을 조합하여 새로운 기능을 만들어내는 개념이다.
참고한 사이트는 요기다. http://macheart.tistory.com/tag/leopard
요기를 참조하여 겨우 캡쳐한 tiff 파일을 jpeg파일로 변경하는데 성공했다.

그런데 알고보니 미리보기 프로그램에서 파일 포멧을 변경해서 저장할 수 있었다.
아직 맥에서의 상단에 고정된 메뉴가 익숙하지 않아 그쪽은 보지도 않는 바람에 찾질 못한거였다.
결론적으로 그냥 삽질하다가 automator라고 하는 새로운 프로그램을 사용하게 된거다. ㅋ

Abstract Factory Pattern

IT/Design Pattern 2009/06/18 23:47 Posted by Gony Taegony

문제
어떻게 하면 같은 제품군에 속한 제품들의 객체만을 생성해서 사용하도록 명확히 보장받을 수 있는가?
예를들어 타입A 제품의 종류는 A1, A2가 있으며 타입B 제품의 종류는 B1, B2 가 있다.
제품 생산시 1번 제품군은 A1, B1이며 2번 제품군은 A2, B2이다.
조건에 따라 제품군으로 분류된 제품만을 생성해야 한다.

방법1
- 제품군을 생성할 때마다 조건 비교를 한다.
- 이 방법은 조건문이 곳곳에 들어가게 된다.
  추후 제품이 추가되는 경우 조건문이 들어간 부분을 모두 찾아서 수정해야한다.
  아래 코드와 같이 생성함수에서 추가된 제품의 종류를 비교해야 한다.
- 샘플
[code cpp]
class productA {};
class productB {};
class productA1 : public productA {};
class productA2 : public productA {};
class productB1 : public productB {};
class productB2 : public productB {};

void CreateProductA ()
{
  ...
  if (iType == 1) {
    productA1 pa1;
  }
  else {
    productA2 pa2;
  }
  ...
}

void CreateProductB ()
{
  ...
  if (iType == 1) {
    productB1 pb1;
  }
  else {
    productB2 pb2;
  }
  ...
}

int main ()
{
  ...
  CreateProductA ();
  CreateProductB ();
  ...
}
[/code]

방법2
- Factory Method 패턴에서 사용했던 팩토리 메소드를 가진 클래스를 제품군별로 생성한다.
- 이점
  1. 개별 제품 클래스의 객체를 생성할 때마다 일일이 조건을 검색할 필요가 없어진다.
  2. 새로운 제품군의 생성시 기존 소스코드는 건드릴 필요가 없다.
  3. 팩토리 클래스가 별도로 존재하기 때문에 클라이언트는 추상클래스의 인터페이스만 바라보면 된다.
  4. 반드시 선택된 제품군에 포함된 제품들만 생성해야하는 경우 유용하다.
- 단점
  1. 제품군이 늘어나면 어쩔 수 없이 팩토리 클래스의 수도 늘어나게 된다.
  2. 기존 제품군에 새로운 제품이 추가되면 모든 팩토리 클래스에 새로운 제품을 추가해야한다.
- 샘플
[code cpp]
class AbstractProductA {};
class AbstractProductB {};
class ProductA1 : public AbstractProductA {};
class ProductA2 : public AbstractProductA {};
class ProductB1 : public AbstractProductB {};
class ProductB2 : public AbstractProductB {};

class AbstractFactory
{
  public:
    virtual productA* CreateProductA () = 0;
    virtual productB* CreateProductB () = 0;
};

class Type1_Factory : public AbstractFactory
{
  public:
    AbstractProductA * CreateProductA () {return new ProductA1;}
    AbstractProductB * CreateProductB () {return new ProductB1;}
};

class Type2_Factory : public AbstractFactory
{
  public:
    AbstractProductA * CreateProductA () {return new ProductA2;}
    AbstractProductB * CreateProductB () {return new ProductB2;}
};

int main ()
{
  ...
  AbstractFactory *pFactory = null;

  if (iType == 1) {
    pFactory = new Type1_Factory ();
  }
  else {
    pFactory = new Type2_Factory ();
  }
 
  AbstractProductA *pProductA = pFactory->CreateProductA ();
  AbstractProductB *pProductB = pFactory->CreateProductB ();
  ...
}
[/code]

사용자 삽입 이미지

사용자 삽입 이미지


Factory Method Pattern

IT/Design Pattern 2009/06/12 00:20 Posted by Gony Taegony

객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스에서 책임지도록 한다.

사용자 삽입 이미지
사용자 삽입 이미지

유용한 경우
- 구체적으로 어떤 클래스의 객체를 생성해야 할지 미리 알지못하는 경우
- 객체의 종류별로 객체 생성과 관련된 부분을 국지화 시키는 경우

장점
- 어떤 객체를 생성할 것인지와는 무관하게 동일한 형태로 프로그래밍이 가능하다.
  ; 당연하다. 클래스 상속을 통한 다형성을 구현하므로 ...
- 클라이언트가 직접 객체를 생성하는 것보다 유연한 확장성 구조를 가지게 된다.
  ; 새로운 객체를 생성하거나 이전 객체를 확장해서 생성하고자 할 때
    새로운 하위 클래스를 정의하고 Factory Method에 해당하는 멤버 함수만
    Override 시키면 된다.
 
; 다시 말하자면 객체 생성과 관련된 변경을 국지화 시킬 수 있다.
- 서로 연관된 클래스들의 상속관계가 병렬로 존재하는 경우 한 쪽 상속 관계의
  클래스들이 다른 쪽 상속 관계의 클래스 객체를 생성할 때 유용하다.
- 상속관계에 있는 클래스들의 멤버 함수가 동일한 프로그램 로직을 가지고 있으면서
  내부적으로 생성할 객체만 서로 다를 때 편리하다.
  ; 로직은 상위클래스에서 구현하고 생성과 관련된 부분만 하위 클래스에서 구현한다.

단점
- 객체의 종류가 달라질 때마다 새로운 하위 클래스를 정의해야한다.
  ; 따라서 불필요하게 많은 클래스들을 내포할 가능성이 있다.

[뱀발바닥]
패턴의 유용성을 알리기 위해 좀 어거지라고 생각되는 예를 (지극히 내생각이다.) 들었다는 느낌이 많이 들었다. GoF 패턴에 대한 해설서이므로 저자가 의도적으로 설명하기 위해서 그렇게 한 것 같긴 하지만 나에겐 좀 아쉬운 부분이다. 하지만 아직 이쪽부분에 대해 용어나 표현에 대해 미숙하기 때문에 그렇게 생각하는지도 모르겠다. 어쨌든 패턴이라고 하는 영역이 소프트웨어를 설계할 때 많은 도움이 되리라고 확신하지만 너무 이쪽 이론에 빠지게 되면 자칫 말장난에 빠질 수도 있겠다는 생각이 든다. 패턴은 객체지향언어를 제대로 쓰기 위해 필요한 기본적인 테크닉일 뿐이라고 생각한다. 나머지는 자신의 영역에 맞게 적용하는게 문제라고 본다. 뭐 그게 어렵겠지만 ㅋㅋㅋ

노트북 재설치

IT/일반 2009/05/24 03:07 Posted by Gony Taegony
지금 쓰는 노트북에 OS를 설치한지 2년이 약간 넘는다.
요즈음들어 좀 버벅거리더니 이젠 Word를 띄우면 그냥 죽어버린다.
설치한지도 좀 되고 해서 금요일 저녁부터 백업을 하고 지금 다시 설치중이다.
백업을 하려고 보니 USB 하드라고 있는게 고작 30 기가 정도다.
어쩔 수 없이 네트웍으로 다른 컴에 백업을 했다.
어제는 이거 하느라 시간 다 보냈다. ㅎㅎ
대충 추려도 백업 용량이 한 80 메가 정도는 되는 것 같다.

오늘은 드디어 백업을 완료하고 숙원(?)이던 포멧에 들어갔다.
처음엔 windows 2008 standard 버전을 설치했다.
그런데 회사에서 쓰는 백신을 깔자마자 처음본게 호환성 문제 창이었다.
개인용으로 쓰는 노트북이면 상관없는 업무용이라 초장부터 이러는 건 아니다 싶어
다시 다 밀어버리고 XP로 설치했다.
그리고나서 한게 드라이버 설치였는데 이게 참 너무 많았다.
귀찮기도 하고 해서 주요 드라이버만 설치하고 나머지 드라이버들은
그냥 자동 설치 프로그램을 설치하려고 했다.
그런데 또 이놈이 .NET 프레임웍을 사용한단다. -_-;
아놔~ 굳이 또 .NET을 쓰는 이유는 뭘까나? 요즘 대세인가? ㅎㅎ
뭐 암튼 .NET이 필요하다니 설치는 해야겠고
일단 Visual Studio를 설치하고 나머지 드라이버를 설치하기로 했다.
Visual Studio 설치하면 .NET도 설치되니까 말이다.
그런데 Visual Studio 설치하다보니 약간 화가났다.
Visual Studio는 각 버전별로 전부 새로 설치해야하기 때문이다.
회사에서 사용하는 버전은 Visual Studio 6, Visual Studio 2003 .NET 버전이다.
하지만 차후 관리하는 제품 코드를 전부 Visual Studio 2005나 2008로 옮길 생각이고
개인적인 욕심도 있어서 2005, 2008을 함께 설치하고 있다.
그러니깐 지금 개발툴만 4개를 설치하고 있는거다.
하다보니 이거 너무 불편하다.
그냥 라이브러리만 버전별로 따로 설치하고 UI 같은 부분은 하나만 설치해도 될 것 같은데
왜 이렇게 만들어놨는지 모르겠다. 쩝~
Visual Studio 6 야 너무 다른 버전이라 그렇더라도 2003 부터는 좀 통일해도 될 듯한데 ...
우찌하리 파는 넘이 그렇게 만들었고 난 그걸 써야하니 ~ ㅋㅋㅋ
거기다 오늘 설치하려고 보니 2003, 2005 버전은 어디갔는지 보이질 않았다. ㅜㅜ
어쩔 수 없이 두 개 버전은 어렵게 다운을 받아 설치 중이다.
크기도 전부 GB 단위라 이게 받는게 시간이 좀 많이 걸렸다.
영화를 몇 편 봤는지 원~
이짓거리를 하고 나니 오늘 하루는 다 가버렸다. -_-
물론 아직까지도 Visual Studio 업데이트 중이다.
400 메가 정도인데 다운 받는 속도가 겁나게 느리다.

내일은 다시 오피스 설치하고 남은 드라이버만 설치하면 기본적인 설치는 끝날 듯 싶다.
한가지 문제는 내가 쓰는 Mozilla ThunderBird 라는 프로그램이 좀 불편해서 아웃룩으로
다시 바꾸려고 하는데 이게 기존 데이터에 대한 변환이 될지 잘 모르겠다.
아웃룩이 너무 무거워서 메일 전용으로 이 놈을 썼는데 좀 많이 불편하다.
버전업도 별로 안되는 것 같공~ 이거 옮기려면 시간 좀 걸릴 듯 싶다.
천둥새로 계속 쓰다가 방법 찾으면 아웃룩으로 옮겨야할 것 같다.

내일은 코딩도 좀 해야하고 좀 바쁠 듯 싶다.
주말은 좀 한가하게 보내야하는데 이번 주말은 컴만 들여다 보고 말았다.
다음주엔 흠~ 뭐 다른 일이 있으려나~ ㅎㅎ

4월 한 달간 ~

IT/일반 2009/04/19 21:58 Posted by Gony Taegony
4월 1일부터 지금까지 사이트 업무를 진행중이다.
신규 제품이라 개발에 참여한 인원은 대부분 사이트에서 테스트를 진행하고 있다.
아무래도 하드웨어와 섞인 부분이 많은지라
기본적인 기능 테스트 이외의 부분은 사이트에 나와서 할 수 밖에 없다.
현재는 가오픈 상태이고 발견된 문제점을 해결하고 월말쯤 정식 서비스를 오픈할 예정이다.
이번 프로젝트는 상당히 어려운 점이 많았다.
우리가 구성하는 시스템의 가장 앞단에 위치하는 시스템을 만드는 업체가 계속해서 문제를 발생시키는 바람에 2주 정도는 그냥 시간을 날려버렸다.
결국 업체가 바뀌어서 문제는 해결되었지만 나머지 뒷단 시스템에 대한 테스트가 상당히 지연이 되어버렸다. 불행히도 이게 내가 만든 모듈이 들어있는 부분이다.
다행히 가오픈을 하긴 했지만 테스트 기간이 짧아 상당히 신경이 쓰이는 부분이다.
아직까진 모듈자체의 문제점은 발견되질 않지만 잠재된 문제들이 있다면 가오픈 기간동안 나와주기만을 바래야 할 것 같다. ^^;
일단 프로젝트는 어느 정도 진행이 완료되어 가고 있지만 내가 생각하기에 아니다 싶은 부분이 있어 몇 자 적어본다.

1. 관리자들의 의사 결정
 난 솔직히 밤샘작업을 하는 부분에 대해서 반감은 없다.
 물론 되도록 안하는게 좋기야 하겠지만 일정상 어쩔 수 없는 경우가 많다.
 사람이 세운 계획이라는게 뜻대로 되는 것 보단 되지 않는 부분이 더 많기 때문이다.
 더구나 여러 업체들이 함께 진행하는 경우엔 말이다.
 계획에는 일정이라는 부분도 포함되어 있기 때문에 기간을 맞추기 위해서는 어쩔 수 없이
 밤샘작업은 발생할 수 밖에 없다고 생각한다. 그런데 이번 건은 좀 심하다는 생각이든다.
 앞서 말했다시피 가장 앞단을 담당하는 업체가 교체되었다.
 이 업체 때문에 2주일을 까먹어버렸고 오픈 취소되고 소송까지 건다는 얘기도 나왔었다.
 이게 가오픈 약 일주일 반쯤 전 얘기다.  왜 이런문제가 발생했을까?
 그 업체에 대한 기술적 평가나 제품에 대한 테스트 진행이 전혀 되지 않았다.
 그런 제품을 사이트에 들고 들어왔으니 계속 죽고 버그 생기고 하는게 당연하다.
 처음엔 그 쪽 엔지니어를 탓했지만 그럴게 아니라는 생각이 들었다.
 도데체 관리자들 (이 프로젝트를 진행한)은 무슨 생각으로 일을 이렇게 까지 만든 것일까?
 그냥 된다고 사이트에 넣어버리고서 엔지니어들이 알아서 진행하라고 하면 다인가?
 어떻게 해서 이런 업체에 대한 의사결정이 이루어졌는지 이해가 가질 않는다.
 업체에 대한 선택이 기간상 어쩔 수 없는 부분이 있었나?
 그럼 그 기간이라는 부분을 왜 그런식으로 잡았을까?
 내가 앞서 사람이 하는 일이라 어쩔 수 없는 부분이 있다고 했지만 그건 누가 봐도
 도저히 예측 못할 일이 벌어졌을 때의 일을 말하는 것이다.
 이런 일을 예측 못했다고 하면 그 사람들은 그 자리에 있으면 안돼는 사람들이다.
 그 사람들도 나름대로의 이유가 있을 것이겠지만 (핑계없는 무덤이 있겠는가!)
 지금 내 위치에서는 이렇게 밖에 생각할 수 없다.
 근데 정말 궁금하다. 왜 그랬을까? -_-;

2. 기술적인 부분에 대한 책임
 현재 프로젝트에 대해 처음 얘기가 나왔을 때 신나게 진행하던 분들이 있었다.
 말그대로 신나게 프로젝트에 대한 그림을 그렸다.
 그런데 지금은 손을 빼버리고 남아 있는 사람들끼리 끙끙 앓으면서 진행했다.
 뭐 솔직히 그래도 해결은 됐다.
 그런데 말이다 자기가 그렇게 했으면 최소한 문제가 발생한 부분에 대한 분석 정도는
 해야 하는거 아닌가 하는 생각이든다.
 내가 정말 열받는 건 문제가 다 해결될 시점에 전화 한 번 해서는
 어떻게 되가냐고 물어본다는 거다.
 사이트 나와달라고 하면 내가 가서 할 일이 뭐있냐고 한다.
 뭐하러 물어보나 그냥 사이트 멤버들이 알아서 할거고
 P.M도 여기 있는데 그냥 여기서 알아서 하게 냅두지~
 자기가 다 그려놓고 나한테 당연히 되야할게 되는지 물어보는건 뭔가~
 될지 안될지 모르는거 그려놓은건가? 아니면 혹시나 하는 마음에 책임회피하는건가?
 그냥 다시는 그 사람이 벌이는 일을 하지 않았으면 하는 바램만 생긴다.
 오~ 신이여 내 마음 속의 화를 잠재우소서~ ㅠㅠ

뭐 상당히 많은 얘기를 쓰게 될 줄 알았는데 프로젝트도 마무리되가고 하니 이 정도만 쓰겠다.
솔직히 지난 달 말엔 누가 건드리면 폭발하기 일보 직전이었다.
그런데 이젠 많이 가라 앉았고 궂이 더 생각해내서 이전 감정으로 가고 싶진 않다.
사람은 개개인 마다 생각이 다르고 또 그래서 싸우고 화해하고 하는 일을 반복한다.
그런데 이 높으신 양반들은 내가 어떻게 해야 잘 지낼 수 있을지 잘 모르겠다.
대놓고 싸울 수도 없고 말이다.
쩝~ 회사 정리 해고 한다는 말도 있고 증말 돌아가시겠네~ ㅋㅋㅋ

iPhone 크로스컴파일 환경 설정

IT/일반 2009/03/16 00:00 Posted by Gony Taegony
요즈음 하루에 조금씩 환경구축을 해보고 있다.

처음엔 크로스컴파일러가 설치된 Cygwin을 받기위해
http://www.iphonegameover.com/cygwin 에서 다운받아 설치하려고 하였으나
계속해서 설치중 에러가 발생하여 직접 컴파일 환경을 설정해 나가기로 했다.
참고한 사이트는 아래 두 사이트 이다.

http://code.google.com/p/iphone-dev/wiki/Building
http://www.modmyi.com/wiki/index.php/Installing_toolchain_for_windows

위 사이트에 있는 순서대로 진행하면 될 듯하여 시작했는데
각 단계별로 소스를 받아 컴파일하고 설치하는 과정이 너무 길어서 하루에 다하기는 힘들다.
컴파일 시켜놓고 멍하니 모니터보기도 뭐해서 켜놓고 자기도 했다.
다음 날 출근을 해야하기 때문에 ... ^^;
우여곡절끝에 오늘 드디어 마지막 단계까지 왔다.
그런데 마지막에 에러가 하나 떴다. 쩝~ 어쩌라는건지 통 모르겠다.
중간에 뭔가 빼먹은 것 같기도 하고 환경세팅이 잘못된 것 같기도하고... @@
아무튼 해결할 방법을 찾지못했다. 아쉽지만 처음부터 다시 해봐야 할 것 같다.
어짜피 설치한 경로가 맘에 안들어 다시 할 요량이었으니 다시 한 번 차근차근 해봐야겠다.

쩝~ 누가 이런걸 비참한 셋방살이라고 하던데~ ㅋㅋ 좀 비참하긴 하다.
그냥 맥북 있으면 해결될 일을~ ^^; 누가 맥북하나 선물 안해주려나~ ㅋ