노무현 전 대통령 서거 추모글 남기기

퍼온 곳:  http://cafe.naver.com/applekoong/379


부울(G. Boole, 1815~1864)이라는 수학자가 있었답니다.

언제적 인물인지도 모르는 수학자가 만든 참과 거짓을 이용한 계산식을 부울 대수(Boolean Algebra)라고 부릅니다.

프로그래머에게는 부울 대수보다는 진리표(truth table)라는 이름이 친근합니다.

진리표가 어렵다면 논리 연산은 어떨까요?

한 가지 사물을 여러 가지 방법으로 부르는 것뿐입니다.

 

[참과 거짓에 대한 정의]

거짓, FALSE - 0

참, TRUE - 0이 아닌 모든 값

 

흔히 하는 실수로 참(TRUE)을 1로 생각하는 경우가 있습니다.

대부분 1이지만, 경우에 따라 1이 아닌 2가 될 수도 있고 -1이 될 수도 있습니다.

그러면 왜, 참을 이와 같이 복잡하게 정의한 것일까요?

실제로는 복잡하게 정의한 것이 아니라 안전하게 정의했다고 표현하는 것이 맞습니다.

 

일단 거짓(FALSE)은 "존재하지 않는다"라는 정도로 해석할 수 있기 때문에,

같은 의미를 갖는 숫자인 0을 사용합니다.

음수인 경우는 음수 크기만큼 갖는다고 얘기합니다.

0일 때 더함도 덜함도 없이 없는 것입니다.

 

만약 참을 1로 정의하면 어떤 일이 일어날까요?

참과 거짓을 알려주기로 약속을 해놓고,

상대방이 이도저도 아닌 -1을 주었습니다.

내 프로그램은 이때 어떻게 동작할까요?

현실에서 이와 같이 예상할 수 없는 일이 일어나면

여러분은 어떻게 행동합니까?

그렇습니다. 깜짝 놀라 당황합니다.

프로그램은?

마찬가지로 깜짝 놀라 당황하고, 비정상적으로 종료하게 될 것입니다.

 

비정상 종료가 발생하게 된 근본 원인은

참과 거짓에 대한 정의를 벗어날 수 있는 숫자가 있다는 것을 인정하지 않았다는 것입니다.

약속은 약속일 뿐이고, 언제든 약속을 어길 수가 있기 때문에 그에 대한 대비를 해야 합니다.

참과 거짓의 경우는 모든 숫자를 참과 거짓으로 나누어야

처리에 어떤 장애도 갖지 않을 수 있습니다.

 

모든 숫자에 대처하기 위해

거짓은 0이고, 참은 거짓이 아닌, 즉 0이 아닌 모든 숫자가 됐습니다.

이제 어떤 숫자가 와도 참과 거짓으로 판단할 수 있게 되었습니다.

 

[함수 반환값에서 주의할 점]

보통 참과 거짓을 함수에 대해 사용하는 경우에는

성공과 실패를 의미할 때가 많습니다.

참은 성공, 거짓은 실패를 의미합니다.

이와 같은 유형의 함수의 반환값은 두 가지가 있습니다.

 

    1. 진짜 참과 거짓을 반환하는 함수

    2. 0과 0이 아닌 정수를 반환하는 함수

 

두 가지 모두 실패는 0을 나타내고 상수로 표현하면 FALSE가 됩니다.

그러나, 참인 경우에는 서로 다릅니다.

1번은 진짜 참을 반환하기 때문에 1을 반환하지만,

2번은 0이 아닌 정수라고 표현했기 때문에 2나 3을 반환할 수도 있습니다.

이러한 함수에서 다음과 같은 코드는 재앙을 초래할 수 있습니다.

 

    if( ReturnValue == 1 )

        printf( "함수 성공" );

 

함수가 반환한 값이 1일 수도 있겠지만,

누차 얘기하듯이 2나 3일 수 있습니다.

그러면 2나 3은 성공이 아닙니까?

성공 맞습니다. 그러나, 성공에도 등급이 있을 수 있지 않습니까?

돈을 많이 버는데, 많이 버는 정도가 서로 다르다는 말입니다.

성공에 대해 0이 아닌 정수를 반환하는 경우는

성공을 여러 가지 형태로 나누길 바라기 때문입니다.

 

어떤 경우는 실패를 단순히 0이 아니라

여러 가지 경우로 나누어 처리하기도 합니다.

주로 음수를 사용해서 표현하는데,

-1은 이름을 잘못 사용했다던가

-2는 파일을 열 수 없었다던가 등등

실패의 종류를 구분하고 싶을 때가 있습니다.

 

    if( ReturnValue != 0 )

        printf( "함수 성공" );

 

제대로 표현하려면, 항상 거짓을 의미하는 0과 비교하는 습관을 들이는 것이 중요합니다.

거짓의 값은 0, 하나뿐이기 때문에 어떤 값을 반환하더라도 성공한 경우에 대처하게 됩니다.

 

[참/거짓과 조건]

참과 거짓은 제어문과 반복문에 이는 조건문에서 주로 사용합니다.

성공과 실패를 판단해서 각각에 맞는 처리를 해야 하므로

조건문과 뗄레야 뗄 수 없는 관계를 맺게 됩니다.

 

그러면 조건문에서 거짓으로 판단하는 0의 값을 갖는 경우에는 어떤 것들이 있을까요?

 

1. 정수 - 0

2. 실수 - 0.0

3. 문자 - 0('\0')

4. 포인터 - 0(NULL 포인터)

 

메모리 관점에서 봤을 때,

비교하고자 하는 메모리의 모든 비트가 꺼져 있을 때를 0으로 간주하는데,

자료형에 따라 해석이 달라집니다.

정수는 0, 실수는 0.0이 되는 것처럼,

문자인 경우에는 null문자, 포인터라면 NULL 포인터가 됩니다

(0번지를 가리키는 주소가 아니라 가리키지 않는다는 뜻의 NULL 포인터입니다.).

이때 포인터의 종류는 상관없습니다.

int*, char*, 구조체 포인터 등등 모든 포인터가 가리키는 곳이 없으면 NULL 포인터가 됩니다.

 

[BOOL vs. bool]

참과 거짓을 나타내는 방법이 C와 C++에서 다릅니다.

C 언어는 대문자 BOOL 자료형을 사용하고

C++는 소문자 bool 자료형을 사용합니다.

둘 다 참과 거짓을 표현하기 위해 만들었지만, 내부는 완전히 다르고 호환되지 않습니다.

 

일단 BOOL 자료형이 C 언어에는 없습니다.

대문자 BOOL 자료형을 사용하려면 typedef를 통해 재정의해야 합니다.

 

    typedef  int  BOOL;

 

이제 int와 BOOL은 같은 자료형이 되었고, BOOL 자료형을 사용할 수 있습니다.

문제는 BOOL 자료형의 근본이 int 자료형이기 때문에

2나 3의 값도 잘 받아들인다는 것입니다.

앞서 말했듯이 항상 거짓인 0과 비교해야 하는 이유입니다.

여기에 대문자 TRUE와 FALSE를 사용하기 위해 enum이나 define으로 상수를 정의합니다.

 

    #define  FALSE  0

    #define  TRUE    1

 

아니면

 

    enum { FALSE, TRUE };

 

처럼 사용해도 됩니다.

다만 정수에 대해서만 정의했고, 둘 다 int 상수라는 점입니다.

자료형과 값을 따로따로 설정하는 것이 번거로워서

다음처럼 한번에 처리하기도 합니다.

 

    typedef enum { FALSE, TRUE } BOOL;

 

그러나, 여전히 BOOL 자료형의 근본이 int 자료형이라는 것에는 변함이 없습니다.

 

    BOOL sw = -1;

 

에러나지 않는 코드입니다.

-1을 의도적으로 넣는 분은 없겠지만,

실수했을 때 컴파일러가 잡아주지 않기 때문에

나중에 치명적인 버그로 나타납니다.

C++인 경우에는 이 코드에서 FALSE와 TRUE만 사용해야 에러가 나지 않습니다.

 

C++에서는 참과 거짓에 대한 단점을 보완하기 위해

C 언어에 없는 새로운 자료형은 제공했는데, 그게 소문자 bool 자료형입니다.

 

    bool sw = -1;

 

이제 이 코드는 에러입니다.

bool 자료형에는 소문자 true와 false만 넣을 수 있습니다.

그러나, VC++ 6.0에서는 에러가 발생하지 않고,

닷넷 컴파일러에서는 가벼운 에러를 뜻하는 경고(warning)가 뜹니다.

true와 false만 넣기 위해 만든 자료형에 -1을 넣는다는 것이

무슨 뜻인지 알 수 없기 때문에, 경고를 발생시키는 것이 맞습니다.

 

BOOL 자료형과 TRUE, FALSE 상수를 정의했다고 가정합니다.

 

    BOOL sw1 = TRUE;

    BOOL sw2 = true;            // VC++ 6.0에서 에러

    bool sw3 = TRUE;

    bool sw4 = true;

 

6.0에서는 에러가 발생하지 않아도 될 부분에서 에러가 발생합니다.

bool 자료형의 크기는 1바이트로,

정확하게 0과 1을 표현하기 때문에 1바이트 정수를 4바이트 정수에 넣는 코드에서 에러가 발생하고 있습니다.

닷넷 컴파일러에서는 전혀 에러가 발생하지 않습니다.

분명 BOOL과 bool 자료형은 다른 자료형임에도

컴파일러 내부적으로 0과 1의 값을 갖는지 판단하는 것 같습니다.

sw3과 sw4에 0과 1이 아닌 값을 넣으면 경고가 뜹니다.

상수로 정의하지 않더라도 0과 1을 넣으면 문제가 없습니다.

표준은 아니지만, 컴파일러 확장 옵션이라고 생각됩니다.

 

[boolean 자료형과 라이브러리]

리눅스와 윈도우 프로그래밍, 즉 C 언어를 벗어나서 운영체제에 특화된 코딩을

시스템 프로그래밍이라고 부릅니다.

윈도우에서는 Win32 API 프로그래밍이라고 부르고,

리눅스에서는 정직하게 시스템 프로그래밍이라고 부릅니다.

 

운영체제를 C 언어로 만들었다고 하는 것은

C++에서 제공하는 bool 자료형을 API에서 볼 수 없다는 것을 뜻합니다.

파일 확장자를 cpp로 주면,

여러분은 bool 변수를 만들어쓸 수는 있지만,

성공 여부를 반환하는 시스템 함수(API)는 대문자 BOOL을 반환할 거라는 뜻입니다.

컴파일러에 따라, 앞서 설명처럼 경고 또는 에러가 발생하겠지만

호환되지 않을 수 있다는 사실을 인지하고 있으면,

형변환이라도 해서 사용할 수 있겠습니다.

 

당연히 C++ 라이브러리에서는

성공 여부를 반환하는 함수는 bool 자료형을 반환합니다.

STL에 들어있는 컨테이너의 멤버 함수인 empty()는

비어있을 때 true, 비어있지 않을 때 false를 반환합니다.

C 언어는 아쉽게도 BOOL 자료형조차 정의하지 않고 있기 때문에

0과 1을 반환할 것입니다.

 

저는 가능하면 bool 자료형을 사용하려고 노력합니다.

잘못될 수 있는 여지를 막아주고 있는데,

사용하지 않는다면 그게 오히려 이상하다고 생각합니다.

라이브러리와 충돌이 나는 부분은 형변환을 통해서 처리합니다.

namespace, 참조 변수 등등 C 언어에 없는 많은 개념을 저는 사용하고 있습니다.

조건 비교에서 true와 비교할 수 있다는 것만으로도 가치가 있다고 생각합니다.

 

강요하는 것은 아니고

어떤 자료형을 쓸지는 여러분이 직접 결정해야 합니다.

저는 여러분이 선택할 수 있도록 정확한 정보를 제공할 뿐입니다.

Posted by Kelly Cook
,
Prob.

1) Close your workspace.
2) delete .ncb file, .opt file and .clw file
3) Now you open the workspace and you can find the class view containing the class details
Posted by Kelly Cook
,

퍼온 곳보기: http://blog.naver.com/codi?Redirect=Log&logNo=120035875202

부팅 디스크 만들기 여러군데에서 봤는데 생각보다 잘 안되더군요.
그리고 이방법이 꼭 최고다 하는 것도 아니구요.
우예됐든 사람들의 목적은 디스크로 부팅만 되면 되는거 아닙니까??ㅋ

각설하고, 첨엔 저도 이방법 저방법 잘 안됐는데, 우연찮게 성공을 한적이 있습니다.
시동 디스크를 만들때 디스크 포멧을 하는데, 윈도우 상에서 포멧을 하니 안되더군요.
도스 모드에서 디스크 포멧을 한 후 시동 디스크를 만들어 보세요.
그러니까 되더군요. 머 그래도 안되면 나도 모름..
-------------------------------------------------------------------
준비물

3.5인치 1.44Mb 플로피디스크 1개

할 수 있다는 마음가짐!!!


1. IO.SYS , MSDOS.SYS , COMMAND.COM
2. FDISK.EXE , FORMAT.COM , SYS.COM
3. OAKCDROM.SYS , MSCDEX.EXE


1번은 부팅 할때 꼭 필요한 파일.
2번은 파티션 설정시, 포맷 할때, SYS 파일은 시스템파일 복구시.
3번은 포맷후 OS설치시 도스상에서는 시디롬 이 잡히지 않기 때문에 필요.

그리고 도스상에서 시디롬을 잡을려면 3번파일은 꼭 들어 가야 됩니다.


자 이제 만들어 보겠습니다.

먼저 3.5인치 플로피 디스크 한개를 플로피디스크 드라이버에 넣습니다.

그 다음 바탕화면의 내컴퓨터 아이콘을 마우스 오른쪽 버튼으로 한번만 클릭 합니다.

메뉴 중에 열기를 선택합니다.

사용자 삽입 이미지


내컴퓨터 탐색기창이 뜹니다.

3.5 플로피(A) 아이콘을 오른쪽 버튼 한번 클릭 후 메뉴 중 '포멧(A)'를 선택합니다.

사용자 삽입 이미지


포멧 실행창이 뜹니다.

다른건 그대로 두시고 '포멧 옵션(O)'에서 'MS-DOS 시동 디스크 만들기(M)'을 선택하고 시작버튼을 누릅니다.

사용자 삽입 이미지


경고 창이 뜹니다. 덜덜...

무서워마시고 확인 버튼을 누르세요. ^^

사용자 삽입 이미지


디스크가 포멧됩니다.

포멧이 완료되었다는 메세지창이 뜨면 확인 버튼을 눌러줍니다.

이것으로 일단 부팅디스켓은 완성이 되었습니다.

사용자 삽입 이미지

 

자 이제 내컴퓨터 탐색기창에서 3.5 플로피(A) 아이콘을 오른쪽 버튼 한번 클릭 후 메뉴 중 '열기(O)'를 선택합니다.

부팅디스켓에 만들어진 파일들이 보이실겁니다.

사용자 삽입 이미지

여기서 필요한 파일은 IO.SYS , MSDOS.SYS , COMMAND.COM, CONFIG.SYS, AUTOEXEC.BAT

이렇게 다섯개 뿐입니다.

따라서 나머지 파일들은 선택하셔서 (Ctrl키 + 마우스 왼쪽버튼) 지우셔야합니다.

사용자 삽입 이미지


이제 CONFIG.SYS 와 AUTOEXEC.BAT의 내용을 만들어 주어야 합니다.

AUTOEXEC.BAT 파일을 마우스 오른쪽 클릭 후 메뉴에서 '편집(E)'를 선택합니다.

사용자 삽입 이미지

메모장이 뜹니다.

A:\MSCDEX.EXE /D:000  라고 적습니다.

사용자 삽입 이미지


그 다음 상단메뉴 중 '파일(F)' 안에 '저장(S)'를 선택합니다.

사용자 삽입 이미지


이제 CONFIS.SYS 파일을 작성해 보도록 하겠습니다.

상단메뉴 중 '파일(F)' 안에 '열기(O)'를 선택합니다.

열기창이 뜨면 왼쪽 아이콘중에서 '내컴퓨터' 아이콘을 선택합니다.

오른쪽 창 아이콘 중에서 '3.5 플로피 디스크'를 마우스 오른쪽버튼을 클릭하여 열기를 누릅니다.

아무 파일도 보이지 않을것입니다.

아래의 '파일 형식(T)'에서 파일 형식을 '텍스트 문서'에서 '모든 파일'로 바꿔줍니다.

이제 5개의 파일이 보일 것입니다.

CONFIS.SYS 파일을 선택하고 열기 버튼을 누릅니다.

사용자 삽입 이미지


CONFIS.SYS 편집창에 DEVICE=A:\OAKCDROM.SYS /D:000 내용을 적습니다.

마찬가지로 상단메뉴에서 '파일(F)' '저장(S)'을 선택하여 저장합니다.

사용자 삽입 이미지



이제 아래의 파일을 다운받아 A플로피 디스켓에 압축을 풀어주시면 됩니다.

Posted by Kelly Cook
,
퍼온 곳: http://blog.naver.com/juru666?Redirect=Log&logNo=60011279607


이 로우 포멧 방법의 평이 어떨지 모르겠으나, 갠적으론 밑쓴에 포우포멧 방법이 더 맘에 들더군요. 이건 뭔가 잘 안되는 것 같음..

언제 한번 일단 실험용으로 안쓰는?? 하여튼 쫌 맛이가긴했어도 작동은하던 예전 30기가 하드로 실험적으로 해봤는데.. 포멧을 시작한지 27시간 지나도 계속 진행중 이길래 걍 꺼버렸음.. 원래 시간이 길다 하지만 27시간은 너무한거 아닌가.. 하드가 이상한건지.. 멈춘 것도 아니고.. 밑에 올린 유틸을 써볼까 생각중이기도 하고, 중간에 걍 꺼버린 하드가 어떤 상태인지도 확인은 안해봤음.. 로우포멧 함 해보고는 싶은뎀..
-----------------------------------------------------------------------
어워드 바이오스를 사용한 메인보드에는 CMOS SETUP 내의 "HDD Low Level Format"에서 로우포맷이 가능하지만 이외의 바이오스는 CMOS SETUP에 로우포맷 기능이 없어 파일로 제공되는 유틸리티로 로우포맷을 해야합니다.
유틸리티로 제공되는 로우포맷의 종류가 많이 있는데 그 중에 가장 많이 사용하고 안정적인 AMIDIAG.EXE에 대해서 자세히 알아보겠습니다.
로우포맷 파일은 부팅 디스켓 내에 복사해서 보관합니다.
A드라이브에 부팅 디스켓을 넣고 부팅을 합니다.
A:\AMIDIAG        라고 쓰고 ENTER를 누릅니다.

로우포맷의 초기 화면으로 아무 키나 누르면 다음으로 넘어갑니다.
아무 키나 누릅니다.
 
 
ESC를 누릅니다.
 
 
방향키를 이용해서 HARD DISK 이동하고 HARD DISK FORMAT에서 ENTER를 누릅니다.  
 
 
 
Disk Drive (C/D)에서 포맷할 하드 드라이브를 선택합니다.
D를 누릅니다.
드라이브를 입력할 때에는 정확히 해야합니다. 자료를 전부 잃을 수도 있습니다.
 
 
하드 디스크의 타입을 입력해야하는데 우측에 하드 타입에 관한 리스트가 나오는데 이곳에서 방향키를 이용하여 제일 아래로 이동하여 USER를 선택하고 ENTER를 누릅니다.
 
 
Disk Drive type를 결정되면 중앙에 창이 나오는데 여기서는 무조건 ENTER를 누릅니다. 그러면 자동으로 값이 입력됩니다.
 
 
Interleave 난에서 커서가 여기서도 계속해서 그냥 ENTER를 누르고 Proceed(Y/N)에서는 Y를 누릅니다.
 
 
하드의 자료를 잃게 된다는 경고 메시지가 나오는데 Y를 입력하고 ENTER를 누릅니다.
 
 
포맷 진행 과정을 보여주면서 포맷을 진행합니다. 만약 하드에 배드 섹터가 있다면 Bad Track List 난에 나타나게 됩니다.
 
 
하드에 문제가 없이 로우포맷이 완료되었다면 이와 같은 화면이 나옵니다.  
종료 후에 재부팅하고 FDISK, FORMAT를 실행하면 됩니다.    
Posted by Kelly Cook
,
사용자 삽입 이미지
 
Taskbar Shuffle은 작업표시줄에 있는 어플리케이션 이름의 순서를 사용자 임의로 바꿀수 있게 해주는 프로그램입니다.

다수의 프로그램을 실행해서 사용하다보면 작업 표시줄에 나타나있는 어플리케이션 제목들을 사용자가 편한 위치로 변경하고 싶은 경우가 한번쯤은 있었을 겁니다. 윈도에서는 작업표시줄의 이름이 기본적으로 이동이 안되기 때문에 어플리케이션을 다시 실행해서 위치를 변경하는 수밖에는 없었습니다. Taskbar Shuffle을 사용하시면 이러한 번거로운 작업을 마우스 드래그를 이용해서 손쉽게 변경하실 수 있습니다.

자리를 바꾸고자 하는 어플리케이션의 제목을 마우스로 드래그해서 원하는 위치에 가져다 놓을 수 있기 때문에 작업표시줄의 프로그램들으 한번더 정렬해서 사용할 수 있는 장점이 있습니다.

프로그램의 사용법이 무척이나 간단하기 때문에 프로그램을 실행하신후 바로 사용이 가능합니다.

실행한 프로그램은 시스템트레이에 아이콘 형태로 상주하며, 마우스 우측 버튼으로 아이콘을 클릭하면 나오는 메뉴를 이용해서 On/Off 하거나 세팅 메뉴를 통해서 중앙 버튼의 클릭의 사용유무를 지정할 수 있습니다.

invalid-file

첨부 파일(ts2[1].0_setup-cjgusdkcjstk)


Posted by Kelly Cook
,