2007년 3월 29일 목요일

쇼펜하우어가 말하는 논쟁에서 이기는 37가지 방법

쇼펜하우어가 말하는 논쟁에서 이기는 37가지 방법이다.
논쟁에서 밀릴때 한번 시도 해도 좋을듯.ㅎㅎ

사용자 삽입 이미지
1. 상대의 주장을 확대시켜 받아들인다.
2. 동음이의어를 이용한다.
3. 상대적으로 제기된 주장을 절대적인 주장으로 받아들인다.
4. 전제들의 전제들을 제기하여 인정을 받아 낸다.
5. 상대의 사고 방식을 이용한다.
6. 증명해야 할 사항을 도리어 슬그머니 전제로 삼는다.
7. 한꺼번에 많은 것을 묻는다.
8. 상대를 화나게 한다.
9. 두서없이 질문을 던진다.
10. 이미 인정받은 사실로 도입한다.
11. 유리한 비유를 선택한다.
12. 과장된 반대 명제를 제시한다.
13. 이유가 안되는 것을 이유로 받아들인다.
14. 옳기는 하지만 아리송한 명제를 이용한다.
15. 모순되는 것이 있는지 찾아본다.
16. 반격 당한 부분을 세밀하게 구별한다.
17. 진행을 중단시키거나 방향을 바꾼다.
18. 일반적인 일로 돌려서 이의를 제기한다.
19. 인정받은 선명제들에서 곧바로 결론을 끌어낸다.
20. 궤변으로 궤변으로
21. '선결 문제의 요구'는 사절한다.
22. 상대가 주장을 과장하도록 자극한다.
23. 불합리한 결론을 내린다.
24. 반대 사례를 제시한다.
25. 맞받아친다.
26. 상대가 화를 내는 논거를 역설한다.
27. '청중에 따른' 논거를 이용한다.
28. 진지한 태도로 갑자기 딴소리를 한다.
29. 권위를 이용한다.
30. 자신의 설명이 부족하다면서 상대의 몰이해를 드러낸다.
31. 사람들이 싫어하는 범주와 연관이 있음을 보여준다.
32. 이유는 인정하면서도 결과는 부정한다.
33. 상대가 회피하는 사항을 파고든다.
34. 동기를 통해 의지에 영향을 준다.
35. 무의미한 말을진지한 표정으로 늘어놓는다.
36. 상대가 틀린 증거를 택했다면, 그것이 상대의 명제가 틀렸다는 논거로 삼는다.
마지막 기술. 상대의 개인적인 일을 공격한다

2007년 3월 28일 수요일

논문 작성 방법

논문작성법에 대하여 여러 자료를 수집한걸 정리하여 올립니다.

사용자 삽입 이미지

논문이란?

어떤 문제에 대해 자기의 주장의 근거를 조사라는 합리적인 방법을 통해 입증하고자 하는 일정량의 글의 집합

* 논문이 아닌 것은 ?

자신의 주장이 없는 것,
자신의 주장에 대해 합리적인 방법으로 근거를 찾지 못한 것

논문의 구성

제목(Title), 초록 (Abstract), 서론 (Introduction), 실험 (Materials and Method), 결과(Results), 고찰(토론)(Discussion), 결론(Conclusions), 참고문헌(References).

논문 작성의 순서 및 내용

1. 실험 방법(Materials and Method)
- 연구를 어떻게 수행하였는지에 대하여
- 대상을 가정,
- 기구, 장비, 과정, 관찰, 자료 수집 방법
- 계산, 주의, 기술, 재료, 분석 등으로 기술한다.
* 실험 조건은 간단히 그러나 명확히 기술하며, 시간의 순서대로 기술
* 문장은 장비(물질 등)이 주어로 하며, 따라서 수동태의 형태가 된다. (장비, 물질 등을 강조하기 위함.)
* 주로 사용되는 동사, 명사는 “수행하였다.”, “조사하였다.”, “기준”, “모델”, “자료”, “설계”, “변수”, “오차” 등이다.

2. 결과
- 고찰을 위한 준비로 결과를 정리하여 기술하되,
- 서론에서 제시된 문제, 질문에 대한 답을 주는 결과를 강조한다.
- 작성 요령
. 결과를 선택하여서
. 결과를 정리하여 기술하고,
. 배경 정보를 기술(선택 사항),
. 결과들을 비교하여 결과를 기술
. 이전 발표 결과와 비교하여 결과를 기술한다.
* 내용을 기술하는 시제는 과거로 하며, 표와 그림은 현대시제로 한다.

3. 고찰
- 질문에 대한 결과로부터 특별한 점을 기술하며, 논쟁의 장이다.
- 결과와 고찰을 함께 기술할 수도 있다.
- 작성 요령
. 서론에서 제시한 질문으로 서두를 시작(선택사항)
. 연구 결과로부터 새로운 발견, 지식, 개념을 언급
. 질문에 답하는 결과를 얻었는지 여부에 대하여 기술
. 기 출판된 결과와 비교하여 기술(연구 결과가 다를지라도)
. 연구 결과에 대한 이론적인 해석, 가능한 응용을 위한 토의
. 간결하게 결론을 제시
. 가능하면 향후 연구 제시
. 간단한 요약, 결론으로 고찰을 끝맺음
- 주의점
. 내용 기술에서 시제는 과거
. 그러나, 해석, 결론, 유추 등은 현재 시제

4. 결론 (Conclusion)
- 서론에서 제시한 연구 목적을 기술하되,
- 일반화, 암시, 향후 연구에 대한 사항을 제시

5. 서론 :
* Why(왜) ?, How(어떻게) ?, What(무엇을) ?, So what(그래서 무엇을) ?
* 시제는 현재형을 기술한다.
* 4 문단으로 구성한다( 1 문단은 4 ~ 6 문장으로 구성)
1. 연구의 주제를 소개하고, 연구 분야의 중요성 강조, 지금까지 연구된 연구범위, 종류 나열
2. 연구의 관심사가 무엇이며, 다른 연구자들이 무엇을 찾았는지를 기술
3. 현재의 연구가 이전의 연구와 어떤 관련이 있는지를 기술, 종래의 연구결과를 간단히 기술
4. 연구의 목적 및 필요성, 개요를 기술

혹은 2 문단으로 나누어서
1. 연구 분야 설정, 연구의 중요성 강조, 관심사 기술, 현재의 결과의 부족함과 차이 기술, 문제점 제시하면서 이전 연구를 요약
2. 현재 연구 소개, 연구 목적 제시, 논문의 구조 혹은 개괄적인 윤곽을 기술, 주요한 결과 언급

6. 참고문헌 리스트

7. 제목
- “이 논문이 무엇에 관한 것인가?”에 대한 답이다.
- 가능한한 최소의 단어 수로 한다. (8단어 ~ 12 단어)
- Key words를 포함시킨다.
* 주의점
The ---, On ---, A study of ---, An analysis of --- 등은 사용해서는 안된다.
 
8. 초록
- 왜 이 연구를 하였나 ? (목적, 주제, 연구 배경을 언급)
- 어떻게 이루어 졌나 ? (연구방법, 특이한 방법을 언급)
- 어떤 결과가 얻어 젔나? (새로운 결과 정리를 함축성 있게 기술)
- 그 결과로부터 얻어지는 일반적인 결론은 무엇인가 ? (강조되어야 할 결론, 고찰 부분을 간략하게 기술)
* 주의점
  . 시제는 과거, 그러나 최근에는 현재
  . 영어 단어로 150 -200 단어 정도
  . 수동태보다는 능동태를 사용하는 경향이 있음.

9. 교정, 제목의 수정

문장에서 피할 것들
1. 조사의 중복을 피하라
2. 피동형을 사용하지 말라
 ~ 이 주어진다. ->  ~을 준다.
 ~ 하여 질 수 있다 -> ~을 할 수 있다.
 ~ 하여져 있다 -> ~하고 있다.
 ~ 구체화되다 -> 구체화하다
 ~ 화되다 -> ~화하다.
3. 장문을 피하라.
4. 가급적 번역투의 표현을 피하라
 시키다 ->  하다
 구체화시키다 -> 구체화하다
 화하다 -> 해지다.
 화되어지다 -> 화하다.
  A로 불리어지는 B -> A로 불리는 B
 하여야 한다고 생각한다. -> 하여야 한다.
 는 것이 좋을 것 같다. -> 는 것이 좋다.
 라 해석할 수 있다 -> 라 해석한다.
 로 알려져 있다. -> 로 알려졌다.
 ~에 있어서의 -> 의 (지구에 있어서의 물 -> 지구의 물)

2007년 3월 27일 화요일

어셈블러 초급 입문

어셈블러에 관련된 자료모음집입니다. 이 포스트는 자주 업뎃이 되여집니다.

어셈블러는 기본 컴퓨터 명령어들을, 컴퓨터 프로세서가 기본 연산을 수행하는데 사용할 수 있는 비트 패턴으로 변환시키는 프로그램이다. 몇몇 사람들은 이러한 명령어들을 어셈블러 언어라고 부르며, 어셈블리 언어라고 부르는 사람들도 있다. 아래에 어셈블러가 어떻게 동작하는지를 나타냈다.

대부분의 컴퓨터들은 미리 지정된 매우 기본적인 명령어 집합을 가지고 나오며, 이것들은 컴퓨터가 수행할 수 있는 기계적인 기본 연산에 부합된다. 예를 들면, "Load"라는 명령어는, 프로세서가 비트 스트링을 프로세서 메모리의 한 장소에서 레지스터라고 불리는 특별한 저장소에 옮기게 한다. 프로세서가 적어도 8개의 레지스터를 가지고 있고, 각각은 번호가 붙여져 있다고 가정할 때, 아래의 명령어는 메모리의 3000번지에 있는 값을 8번 레지스터로 옮기게 된다.
L 8,3000

  • 프로그래머는 이러한 일련의 어셈블러 명령어들을 이용하여 프로그램을 작성할 수 있다.
  • 이러한 일련의 어셈블러 명령어들을 소스코드 또는 원시프로그램이라고 부르는데, 그 프로그램이 시작될 때 어셈블러 프로그램에 조건으로 지정되어진다.
  • 어셈블러 프로그램은 원시프로그램 내의 각 프로그램 문장들을 가져다가 이에 부합하는 비트 스트림 또는 패턴(주어진 길이만큼의 0과 1의 연속)을 만들어 낸다.
  • 어셈블러 프로그램의 출력은 입력된 원시 프로그램과 관련된 오브젝트 코드 또는 목적프로그램이라고 불린다.
  • 오브젝트 프로그램을 구성하고 있는 0과 1의 연속은 때로, 기계어라고도 불린다.
  • 오브젝트 프로그램은 필요할 때마다 실행될 수 있다.

아주 초창기에는 프로그래머들이 실제로 기계어로 프로그램을 작성했지만, 프로그래밍의 속도를 향상시키기 위해 어셈블러 언어와 명령어 세트가 개발되었다. 오늘날, 어셈블러 프로그래밍은 프로세서를 매우 효율적으로 제어해야 하는 곳에만 제한적으로 사용된다. 그러나, 어셈블러 프로그래밍은 특정한 컴퓨터의 명령어 세트에 대해 많은 지식을 필요로 한다. 역사적으로, 대부분의 프로그램들은 COBOL, FORTRAN, PL/1 및 C 등과 같은 고급언어로 쓰여져 왔다. 이러한 언어들은 어셈블러 언어에 비해 배우기 쉽고, 프로그램 작성이 더 빠르다. 이러한 고급언어로 작성된 원시프로그램을 처리하는 프로그램을 컴파일러라고 부른다. 어셈블러와 같이, 컴파일러는 고급언어의 문장을 가져다가 기계어로 변환한다.
프로그램의 준비와 이식성에 관한 새로운 아이디어로서, 가상머신 개념이 있다. 예를 들면, 자바 프로그래밍 언어로 작성된, 바이트코드라고 불리는 출력이 이론적으로만 존재하는 컴퓨터를 위해 컴파일 된다. 바이트코드는 미리 자바 가상머신 내에 다운로드 되거나, 만들어진 어떠한 컴퓨터 플랫폼에도 보내어 질 수 있다. 가상머신은 그 플랫폼의 명령어 길이나 기타 다른 특성을 알고 있으며, 자바 바이트코드를 실행할 수 있다.

아래에 3500라인짜리 어셈블러 초보자 강좌를 올립니다.



2007년 3월 26일 월요일

Linux에서 Apache 2.0.59 와 Tomcat 5.0.28 연동하기

Linux에서 Apache 2.0.59 와 Tomcat 5.0.28 연동하기


Apache 2.0.59 및 Tomcat 5.0.28을 연동하기 위해서 먼저 서버에 Apache 및 Tomcat이 깔린 상태여야 한다.
Tomcat은 java기반의 web server로서 Tomcat을 설치하기 위해서는 우선 먼저 JDK가 서버에 깔려있어야 한다.

http://java.sun.com 에 가서 최신 j2sdk 1.5버젼을 다운로드 받는다.
(참고로 톰캣 5.0에는 필히 jdk 1.5 버젼대 여야만 제대로 동작한다.)

다운로드 받은 소스를 적당히 위치에 저장하고서 압축을 해제하고 필요한 환경변수만 적어주면 Java설치는 끝이난다.

Java 설치하기

사용자 삽입 이미지




배포파일 jdk-1_5_0_08-linux-i586.bin

적당한 위치로 배포파일을 옮겨서 파일을 실행시킨다
실행 전 배포파일의 퍼미션을 확인하여 실행가능한 퍼미션을 갖도록 설정을 한다.

shell> mv jdk-1_5_0_08-linux-i586.bin /usr/local/src
shell> cd /usr/local/src
shell> chmod 755 jdk-1_5_0_08-linux-i586.bin
shell> ./jdk-1_5_0_08-linux-i586.bin

사용권 계약이 화면에 출력되면 y 또는 yes를 입력하여 동의한다.
이 후 설치가 계속 진행되어 jdk1.5.0_08 폴더가 생긴다.
다음 디렉토리를 /usr/local/java에 옮긴다.

mv jdk1.5.0_08 /usr/local/java

/etc/profile을 편집하여 PATH 설정을 해준다.
profile 첫부분에 다음을 추가해준다.

shell> vi /etc/profile

JAVA_HOME=/usr/local/java
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME

변경된 설정을 시스템에 적용시킨다.

shell> source /etc/profile

임의의 위치에서 java를 실행시킨다.

shell> java

JAVA option들이 화면에 출력되면 성공적으로 설치가 이루어진 것이다.

Apache2 설치하기

사용자 삽입 이미지






기존에 존재하는 RPM 패키지를 찾아서 삭제한다.

shell> rpm -qa | grep httpd
shell> rpm -e [httpd RPM name]

현재 Apache 웹데몬이 실행되고 있다면 실행을 중지시킨다.

shell> /etc/init.d/httpd stop

http://httpd.apache.org/download.cgi 에서 Apache 2.0.59를 다운로드 받는다.
리눅스에서 설치할 Apache의 배포본은 모두 소스 형식으로 제공된다.

배포파일 httpd-2.0.59.tar.gz

적당한 위치에서 다운로드 받은 배포파일의 압축을 푼다.

shell> mv httpd-2.0.59.tar.gz /usr/local/src
shell> tar xvfz httpd-2.0.59.tar.gz

생성된 디렉토리 httpd-2.0.59로 이동한다.

shell> cd httpd-2.0.59

다음과 같은 옵션을 사용하여 configure를 진행한다.
옵션, 모듈 및 DSO에 대한 자세한 사항은 이후 추가적으로 설명할 것이다.

shell> ./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so

이어서 컴파일과 인스톨을 실행한다.

shell> make
shell> make install

위의 과정으로 설치를 진행하면 Apache의 root 디렉토리는 /usr/local/apache2가 되고, 모든 관련 파일들은 이 디렉토리속에 저장되게 된다.
디렉토리에 대한 정보는 /usr/local/src/httpd-2.0.59/config.layout을 통해 확인할수 있다.

다음으로 /usr/local/apache2/conf 디렉토리의 설정파일을 변경한다.

메일주소 및 웹서버 주소를 정확히 기입한후 앞에 #부호를 제거한다.

아파치 웹서버를 구동한다.

shell> /usr/local/apache2/bin/apachectl start

아파치 웹서버를 중지시키려면 아래 명령어를 실행하면 된다.

shell> /usr/local/apache2/bin/apachectl stop

* configure 옵션 (autoconf 출력옵션)

--prefix=/usr/local/apache2
--prefix는 말그대로 apache를 지정된 폴더에 일괄로 설치하겠다는 뜻이다. 여기서는 컴파일된 아파치 파일들이 /usr/local/apache2 폴더에 설치가 되여진다.

--enable-modules=so
mod_so(so_module)를 Apache에 컴파일하여 포함시킨다.(모듈의 정적 컴파일)
기본형은 --enable-modules=[MODULE-LIST]로 공백으로 구분한 [MODULE-LIST]에 나와있는 모듈들을 컴파일하여 포함한다.

--enable-so
Apache가 실행시 특별한 옵션없이 자동으로 동적공유객체(DSO-Dynamic Shared Objects)를 읽어들일 수 있도록 하기 위한 설정옵션이다.

* 모듈

Apache는 모듈화된 설계로 이루어진 프로그램이다.
모듈은 특별한 기능을 수행하기 위한 작은 프로그램으로 이해할 수 있다.
즉, 모듈마다 각각의 역할이 다르기 때문에 핵심 구현부 또는 실행부에 추가적으로 포함시켜 원하는 기능을 선택적으로 사용할 수 있다. 
Apache의 핵심 기능을 구현하는 모듈은 core이고 core를 기반으로 모듈을 추가하여 확장된 기능을 사용할 수 있다.
모듈은 Apache 컴파일시 정적으로 포함시킬 수 있고, 또는 DSO mechanism에 의해 Apache 컴파일 이후 추가적으로 포함하여 사용할 수 있다.
DSO(Dynamic Shared Objects)를 지원하기 위해서는 컴파일시 configure 옵션으로 --enable-rule=SHARED_CORE를 추가하여 DSO 지원 형식으로 Apache를 컴파일하여야 하며, mod_so 모듈을 컴파일시 포함시켜야 한다.
mod_so 모듈은 core를 제외하고 DSO가 될 수 없는 유일한 모듈로서 Apache 핵심에 정적으로 컴파일해야 하며, DSO로 컴파일된 모듈을 Apache에서 읽어들이기 위한 기능을 제공한다.
따라서 configure 진행시 일반적으로 mod_so를 포함하도록 한다.

* 동적공유객체(DSO-Dynamic Shared Objects)

Apache가 동적으로 load할 수 있는 객체이다.
core와 mod_so를 제외한 다른 모든 아파치 모듈 소스를 DSO 형식의 모듈로 컴파일하여 Apache에서 load하여 사용할 수 있다.
DSO로 사용할 아파치 모듈을 쉽게 만들기 위해서 apxs(Apache Extension Tool)라는 지원프로그램이 있다.
이 프로그램으로 아파치 배포본 소스 트리 없이, DSO 지원을 위한 플랫폼 특유의 컴파일러 옵션과 링커 옵션을 고려하지 않고 모듈 소스를 DSO 모듈로 쉽게 컴파일할 수 있다.
PHP와 Tomcat 등 외부 프로그램에서 제공하는 DSO 모듈은 프로그램 configure시 apxs를 사용한 옵션을 통해 프로그램과 함께 컴파일되어 생성된다.

Tomcat 5 설치

사용자 삽입 이미지







위에서 JDK설치가 끝났으면 사실 Tomcat 5 설치는 쉬워진 셈이다.
단순히 압축만 풀면 Tomcat 5의 설치가 끝난다.

* Java Servlet Container

JVM 상에서 WEB 서비스를 위한 Java Servlet API를 구현하여 서비스 해주는 Java Program으로, Servlet Container는 Client의 http 요청을 웹서버를 통해 전달받아서 Application Servlet에 전달하고, Servlet의 http 응답 메시지를 웹서버에게 전달해서 Client로 돌려주는 역할을 한다.

* Servlet Container의 종류

1) Sun Microsystems 제공 Servlet Container
JSDK(Java Servlet Development Kit)
JSWDK(JavaServer Web Development Kit)
J2EE(Java2 SDK, Enterprise Edition)
Java Web Server(iPlanet Web Server)

2) Apache 제공 Servlet Container
Apache JServ, Tomcat

3) 기타 Servlet Container
JRun/JRun Pro, Resin, WebLogic, Web Sphere, IAS

* Tomcat

Tomcat은 Apache Software Foundation의 Jakarta 프로젝트의 일환으로 개발중인 소프트웨어이다.
Tomcat은 Java Servlet과 Java Server Page를 사용할 수 있도록 하는 Servlet Container이며 독립적으로 웹서버의 기능을 수행한다. 그러나 일반 html 문서도 Servlet Container를 통해 번역되므로 수행속도가 느리고 웹서버로서의 기능에 제한이 있으므로 보통 다양한 모듈과 막강한 기능을 가지고 있는 Apache 웹서버와 연동하여 사용한다.

배포본은 binary와 source 형식으로 제공된다. 여기서는 바이너리 배포본의 설치만 설명하련다. The Apache Jakarta Project 홈페이지의 Downloads 부분에 있는 CVS repositories는 현재 개발중인 소스들을 확인하고 다운로드 받을 수 있는 페이지이다.

http://tomcat.apache.org/download-55.cgi에서 Tomcat 5.0.28의 tarball 형식의 배포본을 다운로드 받는다.

배포파일 jakarta-tomcat-5.0.28.tar.gz

적당한 위치(설치하고자 하는 경로)에서 압축을 풀어준다.
바이너리 배포본은 압축을 풀어줌으로 기본적인 설치가 완료된 것이다.

shell> cp jakarta-tomcat-5.0.28.tar.gz /usr/local/src
shell> cd /usr/local/src
shell> tar xvfz jakarta-tomcat-5.0.28.tar.gz
shell> mv /usr/local/src/Jakarta-tomcat-5.0.28 /usr/local/tomcat

Jakarta-tomcat-5.0.28 디렉토리가 생성되고 압축이 풀린다.
실행파일이 들어있는 디렉토리로 이동해서 Tomcat을 실행시켜본다.

shell> cd /usr/local/tomcat/bin
shell> ./startup.sh
또는
shell> ./catalina.sh start

Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JAVA_HOME:       /usr/local/java

위의 메시지가 나오면 Tomcat이 정상적으로 작동하는 것이다.
클라이언트에서 웹브라우저를 통해 다음의 주소로 접속한다.

http://localhost:8080 또는 http://설치한서버의주소:8080

정상적으로 Tomcat이 작동하고 있다면 브라우저에 Tomcat 관련 문서가 나타날 것이다.

만일, 정상적으로 작동하지 않는다면 J2SE의 설치가 제대로 이루어지지 않았거나 PATH 설정이 올바르게 이루어지지 않아서이다.
/etc/profile을 에디터로 열어서 J2SE 설치 시 PATH 설정한 부분을 확인해 보자.

마지막으로 PATH를 설정해준다.
PATH 설정은 /etc/profile을 편집하여 이루어진다.
/etc/profile을 에디터로 열어서 J2SE 설치 시 PATH 설정한 부분에 다음을 추가한다.

shell> vi /etc/profile

JAVA_HOME=/usr/local/java
CATALINA_HOME=/usr/local/tomcat
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export JAVA_HOME CATALINA_HOME

변경된 설정을 시스템에 적용시킨다.

shell> source /etc/profile

PATH를 설정해주었으므로 임의의 위치에서 Tomcat을 실행시킬 수 있다.

JK2를 이용한 Apache2 웹서버와 Tomcat5의 연동

The Apache Jakarta Project 사이트에서 JK2 connector를 다운로드 받는다.
JK2의 binary 배포본은 Solaris와 WIN32용 만이 배포되고 있으므로 소스 형태의 배포본을 다운로드 받아야 한다.
http://jakarta.apache.org/site/sourceindex.cgi 에서 JK 2.0.4 Source Release tar.gz를 다운로드 받는다.
배포파일 jakarta-tomcat-connectors-jk2-src-current.tar.gz

JK2 connector 소스를 컴파일 하면 얻을 수 있는 것이 mod_jk2.so 모듈이다.
Apache 웹서버와 Tomcat을 연동할 mod_jk2.so 모듈을 얻는 것이 컴파일의 목적이다.

적당한 위치에서 압축을 풀어준다.
소스들을 컴파일하고 필요한 파일들을 이동시키면 더 이상 사용하지 않기 때문에 /usr/local/src에서 압축을 풀어주겠다.

shell> mv jakarta-tomcat-connectors-jk2-src-current.tar.gz /usr/local/src
shell> cd /usr/local/src
shell> tar xvfz jakarta-tomcat-connectors-jk2-src-current.tar.gz

압축이 풀리면 해당 디렉토리로 이동한다.

shell> cd jakarta-tomcat-connectors-jk2-2.0.4-src/

빌드설정 쉘 스크립트를 실행시킨다.

shell> cd jk/native2
shell> ./buildconf.sh


아래와 같이 .configure하고 make로 컴파일을 진행한다.

shell> ./configure --with-apxs2=/usr/local/apache2/bin/apxs
shell> make

configure 옵션(autoconf 출력옵션) --with-apxs2[=FILE]
Apache 2.0 에서 공유할 DSO 모듈을 build하기 위해 사용한다.
FILE은 Apache apxs tool이 있는 경로를 나타낸다.

shell> cd ../build/jk2/apache2
shell> /usr/local/apache2/bin/apxs -n jk2 -i mod_jk2.so

1) Apache의 환경파일 수정한다.

shell> vi /usr/local/apache2/conf/httpd.conf

233번째 줄정도에 추가한다. 이것은 외부에 있는 jk2모듈을 끌어들임으로서 apache와 tomcat을 정확인 연동하기 위해서 이다.

LoadModule jk2_module modules/mod_jk2.so
추가해줌(396줄) :Index.jsp
DirectoryIndex index.html index.html.var index.jsp

2) workers2.properties 생성한다.

shell> vi  /usr/local/apache2/conf/workers2.properties

아래 부분들을 그대로 복사하여 workers2.properties파일에 넣고 저장한다.

[shm]
file=/usr/local/apache2/logs/jk2.shm
size=1048576

[channel.socket:localhost:8009]
port=8009
host=127.0.0.1

# Defile The Worker
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009

# Anounce Status Worker
# [status:status]

# Announce Uri mapping
[uri:/examples/*]
worker=ajp13:localhost:8009

# Uri mapping
[uri:/*]
worker=ajp13:localhost:8009

재시작할때는 먼저 톰캣을 시동하고 다시 아파치를 시동한다.
자동시작하려면 /etc/rc.d/rc.local속에 아래 스크립트를 추가해야 한다.

shell> export JAVA_HOME=/usr/local/java
shell> /usr/local/tomcat/bin/catalina.sh start
shell> /usr/local/apache2/bin/apachectl start

여기서 주의할점은 톰캣이 시동시 JAVA_HOME이 꼭 PATH에 잡혀있어야함으로 필히 위에서와 같이 설정해주어야 한다.^^

2007년 3월 25일 일요일

착시 현상...

명학이 한테서 가진 착시를 일으키는 이미지이다.
그림에서 A와 B 배경색상이 겉보기에는 서로 다른 같지만 사실상 똑 같다...

포토샵에서 이미지를 불러와 색상을 추출해본 결과 일치하게도 같았다.

착시 원본 이미지

원본 이미지





















착시 이미지 테스트

테스트된 파일

2007년 3월 20일 화요일

CentOS 4.3에서 Oracle 10g R2 설치하기

CentOS 4.3에서 Oracle 10g R2 설치하기

사용자 삽입 이미지




우선 Oracle 10g설치에 필요로 하는 CentOS 패키지 들을 열거하면 다음과 같다.

    X Window System
 GNOME Desktop Environment
 Editors
 Graphical Internet
 Text-based Internet
 Server Configuration Tools
 Development Tools
 X Software Development
 Legacy Software Development
 Administration Tools
 System Tools

오라클 다운로드
아래 주소로 가셔서 오라클 10.2버젼을 다운받는다.
http://otn.oracle.com/software/products/database/oracle10g/index.html

압축해제

unzip 10201_database_linux32.zip

Hosts 파일
해당 파일속에 아래와 같은 포맷의 주소가 적혀져 있어야 한다.
<IP-address>  <fully-qualified-machine-name>  <machine-name>
예를 들자면 아래와 같은 형식으로 마추어 주면 된다.
192.168.0.220         entech.com entech

커널 파라메터의 설정
아래 설정사항들을 /etc/sysctl.conf파일속에 추가한다.

cat >> /etc/sysctl.conf <<EOF
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
EOF

추가후 시스템 재부팅할 필요없이 적용한다.

/sbin/sysctl –p

oracle 사용자 계정의 Shell Limit 설정

오라클은 Linux 계정 별로 실행되는 프로세스와 열린 파일의 수를 제한하는 것을 권장한다. 이를 위해, root 계정에서 아래 명령을 복사하여 붙여 넣는 방법으로 실행한다:

cat >> /etc/security/limits.conf <<EOF
oracle               soft    nproc   2047
oracle               hard    nproc   16384
oracle               soft    nofile  1024
oracle               hard    nofile  65536
EOF
cat >> /etc/pam.d/login <<EOF
session    required     /lib/security/pam_limits.so
EOF

/etc/selinux/config 파일을 수정하여 secure linux를 Disable한다.

SELINUX=disabled

셋업
필요한 패키지들을 설치한다.
아래의 명령어를 사용하여 필요한 패키지들을 설치한다.

# From RedHat AS4 Disk 2
cd /media/cdrom/RedHat/RPMS
rpm -Uvh setarch-1*
rpm -Uvh compat-libstdc++-33-3*
rpm -Uvh make-3*
rpm -Uvh glibc-2*

# From RedHat AS4 Disk 3
cd /media/cdrom/RedHat/RPMS
rpm -Uvh openmotif-2*
rpm -Uvh compat-db-4*
rpm -Uvh libaio-0*
rpm -Uvh gcc-3*

# From RedHat AS4 Disk 4
cd /media/cdrom/RedHat/RPMS
rpm -Uvh compat-gcc-32-3*
rpm -Uvh compat-gcc-32-c++-3*
rpm -Uvh rsh-*

새로운 사용자 및 그룹을 추가한다.

groupadd oinstall
groupadd dba
groupadd oper
useradd -g oinstall -G dba oracle
passwd oracle

오라클이 설치될 디렉토리를 만든다.

mkdir -p /u01/app/oracle/product/10.2.0/db_1
chown -R oracle.oinstall /u01

RHEL4 관련 주의 사항: Oracle Universal Installer는 설치 전에 운영체제의 버전을 점검하고 지원 가능 여부를 검증한다.
Oracle Database 10g 10.1.0.3의 Installer는 RHEL4가 지원 가능한 버전임을 인식하지 못한다. 이 경우, runInstaller를 실행하기 전에
아래 작업을 수행해야 한다.

cp /etc/redhat-release /etc/redhat-release.orig
cat > /etc/redhat-release << EOF
Red Hat Enterprise Linux AS release 3 (Taroon)
EOF

오라클 계정으로 로그인하신후 .bash_profile을 아래와 같이 수정한다.

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=/usr/sbin:$PATH; export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=orcl
unset ORACLE_HOME
unset TNS_ADMIN

프로파일 설정사항을 적용하기 위하여 필히 su – oracle로 재 로그인해야한다.^^ (su oracle 아니다.)

설치
* X Window 를 클라언트 컴에서 넘겨서 설치하기 위하여
vi /etc/X11/gdm/gdm.conf
XDMCP 코너 아래에서 Enable=true 로 해주어야 한다

X-manager 설정법

Session : NF      / 임이로
Host : 192.168.0.220     / Server IP
Protocol : SSH  
User Name : oracle     / oracle 계정으로 로긴
Password :       / oracle 계정의 암호
Execution Command : /usr/bin/X11/xterm -ls    / *** 셀을 띄우는 명령어

셀 화면이 뜨면 /usr/bin/gnome-session  을 실행  / X-Window 를 띄우는 명령어

재부팅하여 설정에 이상이 없는지 확인한다
#shutdown –r now

재부팅이 이상이 없음을 확인하고 XManager로 X-Window에로 접속한다
Terminal창을 두개 켜고 하나는 root로 다른 하나는 oracle로 로그인한다
runInstaller를 실행한다.

runInstaller로 설치하는 과정을 첨부된 파일을 참고하면 된다.

CentOS 4.3에서 Oracle10g설치.doc

실제 runInstaller를 실행했을때 각 설치과정들을 스샷으로 쉽게 설명하였다.




2007년 3월 19일 월요일

Oracle 유저 및 Schema 생성 쉘스크립트

현재 학부 서버에 설치된 oracle 용 유저 생성 쉘스크립트입니다.

#!/bin/bash
# Usage : ./addoracle id password
# 2007/03/19 작성

dateis=$(date +%Y/%m/%d)
timeis=$(date | awk '{print $4}')

# 아규먼트를 체크한다
if [ $# = 0 ]
then
echo "Usage: ./addoracle.sh id pass"
exit 1
fi

# Oracle 에 새로운 TableSpace 를 추가한다
echo -n "ORACLE TableSpace Create? - [y/n](default n) : "
read db
if [ "$db" = "y" ] || [ "$db" = "Y" ]; then
echo -n "ORACLE system password: "
read pass
touch /tmp/oracle_dbusersetup_temp
echo "CREATE TABLESPACE $1 datafile '/data/oracle/orcl/$1.dbf' size 10M;" >> /tmp/oracle_dbusersetup_temp
echo "CREATE USER $1 identified by $2 DEFAULT TABLESPACE $1;" >> /tmp/oracle_dbusersetup_temp
echo "GRANT CONNECT, RESOURCE TO $1;" >> /tmp/oracle_dbusersetup_temp
/oracle/product/10.2.0/db_1/bin/sqlplus system/$pass@orcl < /tmp/oracle_dbusersetup_temp
rm -f /tmp/oracle_dbusersetup_temp
fi

오라클 10g에서 테이블스키마 생성 및 사용자 생성 및 권한 부여

오라클 유저 생성 및 스키마 생성에 관련하여 간단하게 정리한것이다.

사용자 삽입 이미지



Oracle 용 스키마 생성 및 사용자 추가 관련 쿼리문

/*
 - Schema : s03107013
 - Passwd : flrjs
*/

/* 테이블 스페이스 생성 */

CREATE TABLESPACE s03107013 datafile '/data/oracle/orcl/s03107013.dbf' size 10M;

이것은 테이블 스페이스라는 Oracle에서 실제로 데이터 저장장소를 만ㄷ는 것입니다.

'/data/oracle/orcl/s03107013'의 파일을 10MB로 초기생성하고 그 이름은 s03107013 입니다.

사용자 생성 관련 쿼리문
/* User(Schema) 생성 */

CREATE USER s03107013 identified by flrjs DEFAULT TABLESPACE s03107013;

/* 권한 부여 */

GRANT CONNECT, RESOURCE TO s03107013;

2007년 3월 16일 금요일

8255 functions

8255칩에 대한 Datasheet입니다. 실제 프로젝트를 진행하면서 많이 유용할것 같은 자료입니다.

General

The Intel 8255A is a general purpose programmable I/O device which is designed for use with all Intel and most other microprocessors. It provides 24 I/O pins which may be individually programmed in 2 groups of 12 and used in 3 major modes of operation.

In MODE 0, each group of 12 I/O pins may be programmed in sets of 4 and 8 to be inputs or outputs. In MODE 1, each group may be programmed to have 8 lines of input or output. 3 of the remaining 4 pins are used for handshaking and interrupt control signals. MODE 2 is a strobed bi-directional bus configuration.

The 8255 is a 40 pin integrated circuit (IC), designed to perform a variety of interface functions in a computer environment. The 8255 wasn't originally designed to be connected to the Z80. It was manufactured by Intel for the 8080 microprocessor.

PIN configuration

사용자 삽입 이미지
D0 - D7 These are the data input/output lines for the device. All information read from and written to the 8255 occurs via these 8 data lines.
CS (Chip Select Input). If this line is a logical 0, the microprocessor can read and write to the 8255.
RD (Read Input) Whenever this input line is a logical 0 and the RD input is a logical 0, the 8255 data outputs are enabled onto the system data bus.
WR (Write Input) Whenever this input line is a logical 0 and the CS input is a logical 0, data is written to the 8255 from the system data bus
A0 - A1 (Address Inputs) The logical combination of these two input lines determines which internal register of the 8255 data is written to or read from.
RESET The 8255 is placed into its reset state if this input line is a logical 1. All peripheral ports are set to the input mode.
PA0 - PA7, PB0 - PB7, PC0 - PC7 These signal lines are used as 8-bit I/O ports. They can be connected to peripheral devices. The 8255 has three 8 bit I/O ports and each one can be connected to the physical lines of an external device. These lines are labeled PA0-PA7, PB0-PB7, and PC0-PC7. The groups of the signals are divided into three different I/O ports labeled port A (PA), port B (PB), and port C (PC).

Block diagram

사용자 삽입 이미지

Block diagram of the 8255

Two control groups, labeled group A control and group B control define how the three I/O ports operate. There are several different operating modes for the 8255 and these modes must be defined by the CPU writing programming or control words to the device 8255.

The line group of port C consists of two 4 bit ports. One of the 4 bit group is associated with group A control and the other 4 bit group with group B control device signals. The upper 4 bits of port C are associated with group A control while the lower 4 bits are associated with group B control.

The final logic blocks are read/write control logic and data bus buffer. These blocks provide the electrical interface between the Z80 and the 8255.

The data bus buffer buffers the data I/O lines to/from the Z80 data bus. The read/write control logic routes the data to and from the correct internal registers with the right timing. The internal path being enabled depends on the type of operation performed by the Z80. The type of operation can be I/O read or I/O write.

Control Word Register

Before going to discuss the detailed description about the usage of the 8255 in the MZ-700, you should see the bit definitions of the 8255 control word register (port $E003 of the MZ-700).

If bit 7 of the control word is a logical 1 then the 8255 will be configured. See the picture of the practicable configurations:

사용자 삽입 이미지

Mode definition of the 8255 control register
to configure the 8255

If bit 7 of the control word is a logical 0 then each bit of the port C can be set or reset. See the picture of the practicable possibilities:

사용자 삽입 이미지

Bit definitions of the 8255 control register to modify single bits of port C

Examples:
If you want to set/reset bit 0 of port C then set D3 to D1 to 000.
Bit 1 of port C will be set/reset if you code 001 to D3 to D1.
Bit 6 of port C is set/reset if D3 to D1 is 110.

Go to page "Memory mapped I/O" to download the complex datasheet of the 8255.

2007년 3월 14일 수요일

제1강 어셈블리 언어 입문

프로젝트를 진행하기 위하여 급히 시작한 어셈블리 공부이다.
아침 2시간을 이용하여 들었었것들을 정리하였다.

1. 데이터의 형식

컴퓨터의 주된 목적은 데이터를 저장한다던지, 검색 한다든지, 데이터에 대하여 연산을 수행하는 것이다.
데이터 형식의 종류는 부호있는 정수(singed integers), 부호 없는 정수(unsigned integers), BCD(Binary Code Decimal), 문자열(strings), 비트(bits) 그리고 부동소수점 수이다.

2. 메모리 주소 지정

응용프로그래머가 사용할수 있는 레지스터 세트는 전부 16개인데 이들은 3가지 종류로 나뉘여 진다.

범용레지스터

80x86 에는 크기가 32비트인 범용 레지스터가 8개 있는데, 이들은 덧셈, 뺄셈, 곱셈, 나눗셈 등의 사칙연산과 메모리 주소를 형성하기 위해서 사용된다. 이들 8개 레지스터들은 각각 EAX, ECX, EDX, EBX, ESP, EBP, ESI 그리고 EDI라는 이름을 붙인다.

이들 레지스터의 하위 16비트는 단독의 16비트 레지스터로써 접근이 가능하며, 그 경우는 이들 각각이 AX, CX, DX, BX, SP, BP, SI 그리고 DI로 된다. 이들 레지스터는 16비트 레지스터로써 접근했을 때, 32비트 범용 레지스터상의 상위 16비트의 내용이 변하거나 파괴되지 않는다.

X 레지스터 - AX, BX, CX, DX - 의 상위나 혹은 각 8비트는 각각 독립적으로 8비트 레지스터로 접근할수 있다. 두번째 문자에 있는 X대신에 H나 L붙이면 8비트 레지스터를 지정하게 된다. AH라면 AX 레지스터의 상위 8비트, 혹은 EAX레지스터의 비트 8~15까지에 해당되는 것이고 AL라면 AX레지스터의 하위 8비트, 혹은 EAX레지스터의 비트 0~7까지에 해당되는 것이다.

2007년 3월 2일 금요일

좋은 자바프로그래밍을 하기 위한 전략

좋은 글이라 판단되여 퍼왔습니다.



1. 목표를 확실히 하라


세상의 모든일이 그렇듯이, 소프트웨어를 개발하는 작업 역시, 목표를 확실히 잡는것이 중요합니다. 개중에 프로젝트를 진행하다보면, 볼 수 있는데요. 쇼핑몰을 예를 들어보도록 하죠. 쇼핑몰은, 물건을 팔아서 수익을 남길 수 있는 것이 궁극적인 목적입니다. 그 목적에 부합한 시스템을 설계하고, 목표로 잡아서 개발해야 하지만, 종종, 개발자의 아집이라고 할까요? 아님 욕심이라고 할까요… 새로운 기술을 접목시켜 보고자 하는 욕심이나, 경영진의 의도에 따른 신기술(CRM 등등) 적용이 우선시 되어, 실제로 활용되지 못하는 기술이나 솔루션 적용을 목표로 두고, 원래 목적과 벗어나는 경우가 많습니다. 아무리 좋은 솔루션이나 기술이라도, 제대로 활용을 하지 못하면 소용이 없습니다.

게임을 만드는데는 재미가, 기업 홈페이지를 구축하는데는 회사의 이미지와 마케팅이, 그리고 기업용 Application 제작에는 수익증대와 효과적인 자원 관리에 있습니다. 그 목적을 성취시키지 못하면 아무리 좋은 기술과, 문서화, 안정성등을 가지고 있어도, 좋은 소프트웨어라고 볼 수 없습니다.

2. 목표 개발환경을 체크하라. (네트워크 환경 문제..)

많은 개발자들이 놓치고 넘어가는 부분중에 하나인데요, 목표 환경을 설정하는것이 매우 중요합니다. 사용자가 제작된 소프트웨어를 어떤환경에서 사용할지를 염두해두고 개발하는것은 매우 중요한 일입니다. 보통 하드웨어 환경은 대부분 체크를 하시고 개발을 하시는데 반면, 네트워크 환경을 체크하시는 개발자는 별로 많지 않더군요.

 국내의 경우, 초고속 인터넷 환경이 발달하여, 큰문제는 없지만, 아직까지 인터넷환경이 제대로 세팅되지 않은 중국같은 경우에는, 특정 소프트웨어의 네트워크 모듈때문에, 국내에서는 잘 작동하던 소프트웨어가 latency 등의 이유로 제대로 작동하지 않는 경우가 많습니다. 국내에서도 LAN 환경이 10M냐, 100M냐에 따라서도 서버간의 통신에서는 문제를 미치는 경우가 많습니다

 특히 자바개발자가 주의해야할점은 JVM의 Version인데, 많은 경우 이 JVM에서 생각하지도 못했던 오류가 일어나는 일이 많습니다. 꼭 사용자가 사용할 JVM Version을 체크하고, 테스트 결과를 리포팅하는 것이, 추후에 일어날 수 있는 문제를 예방할 수 있습니다.

3. 개발에도 순서와 절차가 있다. – 개발 방법론

어느정도 개발을 하신분들은 다 느끼시겠지만, 개발에도 순서와 절차가 있지요. 소프트웨어공학론이니, 개발방법론이니, 모두 이 부분에 속하는데, 이미 알고 계시는 이야기는 넘어가도록 하고, 이 부분에서 가장 중요한것은, 어떤 패턴은 사용하고, refactoring을 하고, uml을 이용해서 diagramming을 하는게 아닙니다. 딱 두가지만 이야기 하도록 하겠습니다.

 첫번째는, Analysis 입니다. 얼마나, 고객의 요구사항은 제대로 분석해내고, risk 요소에 대한 분석과 대책을 어떻게 세웠느냐에 따라, 그 프로젝트의 성공과 실패가 갈린다고해도 과언이 아닙니다. 보통 이 분석단계가 주목구구식으로 이루어 지는 경우가 매우 많지요. 그리고, 국내에서는 이상하게, 기법들이 분석보다는 설계 단계에 치우쳐져 있는듯한 느낌이 듭니다. 고객이 요구하는바를 제대로 catch해 내지 못하면 개발이 끝난후에도, 다시 코드를 수정하는 일이 많아져서, 결국은 누더기 같은 소프트웨어가 되버려버리지요. 어느정도 개발을 해보신분들은 대부분 공감을 하실거라 생각합니다.

 두번째는, 이것도 목적에 부합하라는 이야기와 비슷할 수 도 있겠는데요. 방법론을 선택하는데 있어서, 알맞은 방법론을 선택하라는 이야기 입니다. 5인정도의 프로젝트의 팀에서 RUP와 같이 큰 방법론을 적용할 필요가 없겠지요? 반대로, 100인 정도의 팀에서 XP를 적용한다면, 아무래도 문제가 있을겁니다. 정보공학방법론,OOAD,OSP,XP,RUP,SSADM등 방법론은 정말 많습니다만, 자신의 팀과, 프로젝트 환경에 알맞은 방법론을 시대의 주류에 휩쓸리지말고 선택하는것도, 좋은 소프트웨어를 만드는 첫걸음이 아닐가 생각합니다.

4. 개발 능력은 필수, 멀티 플레이어 개발자가 되자.

프로그래밍을 하시면서 많이들 느끼실테지만, 요즘은 개발능력, 코딩 능력 하나로만은 어렵다는 생각이 듭니다. 적어도 두가지 이상의 분야를 체득해야 성공적인 개발자로 거듭날 수 있다고 생각이 되는데요.

그중에서도 domain expert(특정 비지니스 프로세스에 대한 전문가) 적인 능력을 가지고 계신분은 해당 업무를 개발하는데, 훨씬 이득이 있는 것으로 생각이 됩니다. 병원 업무 개발하는 사람은 병원 업무를 잘알고, ERP 쪽에서 일하시는분은 회사 돌아가는 프로세스를 알고 있으면 도움이 되겠지요?

 또한 domain expert 이외에도, 기획 능력이나, 디자인 능력, 경영 능력, 팀관리 능력, 세일즈 능력등등의 두가지 이상의 능력을 가지고 있는 개발자 분들이, 요즘 유난히 눈에 띄는것을 볼 수 있습니다.

 개발은 기술일 뿐이고, 그 기술을 뒷받침해주고, 좀더 빛나게해주는 무언가가 필요하다는 생각이 절실하군요..

5. 전반적인 바탕 지식을 튼튼히 하자. – 데이터베이스,WAS 등등

두말할 필요 없겠지만, 내가 자바 개발자라고 해서, 자바만 알아서는 안되겠지요? 제대로된 자바 프로그래밍을 하기 위해서는 JVM 구조를 알면 도움이 되고, JVM을 제대로 알려면 System Programming을 알아야 이해가 되겠지요? DBMS 프로그래밍을 하려면 DBMS SQL 이 어떻게 사용하면 효율적인지도 알아야 겠구요.. 그래서 보통 개발자들이 갖추어야할 4대 기술을 System Programming,Network,Database,Software Engineering 을 꼽습니다.

 따져 보면, IT 기술의 거의 모든 분야라고 할 수 있겠는데요. 거의 모든 분야가 필요한게 사실이기도 하지요… 흔히들 개발자들 사이에서 내공이 튼튼하다라는 말을 쓰는데, 이러한 기술들이 내공이 아닌가 싶습니다. 개발언어도 물론 특징과 공부해야할것은 많지만, 이런 내공이 튼튼하다면, 좀 더 쉽게 접근할 수 있다고 생각합니다.

6. 예제 코드를 많이 보자.

각종 벤더에서 발표되는 example 코드나, 서적의 소스코드들을 보면 정말 잘 짜여진 코드들이 많습니다. 이런 코드들을 보고 있노라면, 저도 다시 참 많은것을 배우게 되는데요. 코딩룰에서 부터, 주석 달기, 패턴 등등. 끝이 없더군요… 자신이 안다고 단순히 넘어갈것이 아니라, 예제 코드들은 한번쯔음 살펴보는것이 좋을 것이라고 생각되구요. 단! 국내 몇몇 기초 서적들의 코드들은 다소 문제가 있는 코드들이 많기 때문에, 주의하셔서 보는것이 좋을것 같네요. 한번 잘못들여진 습관은 꽤 오래갈 수 있거든요..

출처 : http://www.j2eestudy.co.kr/

2007년 3월 1일 목요일

Ultimate Black XMB Theme 리뷰

새롭게 릴리즈 된 Ultimate Black XMB Theme.


한글 메뉴 사용시 원본 topmenu_plugin.rco파일에 존재하고 있는 버그땜에 이상한 글자가 보일수 있다.
한글 FIX용 파일로 교체하여 사용하면 된다.
라이센스 및 RSS채널등이 정확히 표시됨을 확인할수 있다.