calc : 계산기
charmap : 문자표
cleanmgr : 디스크 정리
clipbrd : 클립보드에 복사된 내용 표시
cmd : 명령 프롬프트
sysedit : 시스템 구성 유틸리티의 실행 목록을 편집
desk.cpl : 디스플레이
dxdiag : 다이렉트 x 및 시스템 정보
eudcedit : 사용자정의 문자 편집기
explorer : 윈도우 탐색기
maqnify : 돋보기
mobsync : 동기화
mmc.exe : 콘솔 루터
msconfig : 시스템 구성요소 유틸리티
msinfo32 : 시스템 정보
mspaint : 그림판
notepad : 메모장
osk : 화상키보드
recent : 최근 사용 문서
regedit : 레지스트리 편집기
system.ini : 시스템 구성 편집기
taskmgr.exe : 작업관리자
telephon.cpl : 전화 및 모뎀 옵션
timedate.cpl : 날짜 및 시간
winver : 윈도우 버젼 확인
wmplayer : 윈도우 미디어 플레이어
wordpad : 워드패드

제어판 관련
access.cpl : 내게 필요한 옵션
appwiz.cpl : 프로그램 추가/제거
control : 제어판
control admintools : 관리 도구
control userpasswords : 사용자 계정
control userpasswords2 : 사용자 계정(고급)
hdwwiz.cpl : 새 하드웨어 추가
intl.cpl : 국가 및 언어 옵션
joy.cpl : 게임 컨트롤러
main.cpl : 마우스
mmsys.cpl : 사운드 및 오디오 장치
ntbackup : 백업 및 복원 마법사
powercfg.cpl : 전원 옵션
sysdm.cpl : 시스템 등록정보
wscui.cpl : 보안센터

네트워크 관련
inetcpl.cpl : 인터넷 옵션
mstsc : 원격 데스크톱 연결
netstat : 열린 포트와 TCP / IP 프로토콜 정보
ncpa.cpl : 네트워크 연결
ping 주소 : 핑 테스트
telnet open 주소 : 텔넷 접속
ipconfig : ip주소 확인

======================
언어 언어(국가) ANSI OEM
======================
Afrikaans   Afrikaans      1252  850
Albanian   Albanian      1250  852
Arabic    Arabic (Algeria)    1256  720
Arabic    Arabic (Bahrain)    1256  720
Arabic    Arabic (Egypt)     1256  720
Arabic    Arabic (Iraq)     1256  720
Arabic    Arabic (Jordan)     1256  720
Arabic    Arabic (Kuwait)     1256  720
Arabic    Arabic (Lebanon)    1256  720
Arabic    Arabic (Libya)     1256  720
Arabic    Arabic (Morocco)    1256  720
Arabic    Arabic (Oman)     1256  720
Arabic    Arabic (Qatar)     1256  720
Arabic    Arabic (Saudi Arabia)   1256  720
Arabic    Arabic (Syria)     1256  720
Arabic    Arabic (Tunisia)    1256  720
Arabic    Arabic (U.A.E.)     1256  720
Arabic    Arabic (Yemen)     1256  720
Armenian   Armenian      0   1
Azeri (Cyrillic) Azeri (Cyrillic)    1251  866
Azeri (Latin)  Azeri (Latin)     1254  857
Basque    Basque       1252  850
Belarusian   Belarusian      1251  866
Bulgarian   Bulgarian      1251  866
Catalan    Catalan       1252  850
Chinese    Chinese (Hong Kong S.A.R.)  950   950
Chinese    Chinese (Macau S.A.R.)   950   950
Chinese    Chinese (PRC)     936   936
Chinese    Chinese (Singapore)    936   936
Chinese    Chinese (Taiwan)    950   950
Croatian   Croatian      1250  852
Czech    Czech       1250  852
Danish    Danish       1252  850
Divehi    Divehi       0   1
Dutch    Dutch (Belgium)     1252  850
Dutch    Dutch (Netherlands)    1252  850
English    English (Australia)    1252  850
English    English (Belize)    1252  850
English    English (Canada)    1252  850
English    English (Caribbean)    1252  850
English    English (Ireland)    1252  850
English    English (Jamaica)    1252  850
English    English (New Zealand)   1252  850
English    English (Philippines)   1252  437
English    English (South Africa)   1252  437
English    English (Trinidad)    1252  850
English    English (United Kingdom)  1252  850
English    English (United States)   1252  437
English    English (Zimbabwe)    1252  437
Estonian   Estonian      1257  775
Faroese    Faroese       1252  850
Farsi    Farsi       1256  720
Finnish    Finnish       1252  850
French    French (Belgium)    1252  850
French    French (Canada)     1252  850
French    French (France)     1252  850
French    French (Luxembourg)    1252  850
French    French (Monaco)     1252  850
French    French (Switzerland)   1252  850
FYRO    Macedonian FYRO Macedonian  1251  866
Galician   Galician      1252  850
Georgian   Georgian      0   1
German    German (Austria)    1252  850
German    German (Germany)    1252  850
German    German (Liechtenstein)   1252  850
German    German (Luxembourg)    1252  850
German    German (Switzerland)   1252  850
Greek    Greek       1253  737
Gujarati   Gujarati      0   1
Hebrew    Hebrew       1255  862
Hindi    Hindi       0   1
Hungarian   Hungarian      1250  852
Icelandic   Icelandic      1252  850
Indonesian   Indonesian      1252  850
Italian    Italian (Italy)     1252  850
Italian    Italian (Switzerland)   1252  850
Japanese   Japanese      932   932
Kannada    Kannada       0   1
Kazakh    Kazakh       1251  866
Konkani    Konkani       0   1
Korean    Korean       949   949
Kyrgyz    Kyrgyz (Cyrillic)    1251  866
Latvian    Latvian       1257  775
Lithuanian   Lithuanian      1257  775
Malay    Malay (Brunei Darussalam)  1252  850
Malay    Malay (Malaysia)    1252  850
Marathi    Marathi       0   1
Mongolian   Mongolian (Cyrillic)   1251  866
Norwegian(Bokmal) Norwegian (Bokmal)    1252  850
Norwegian(Nynorsk) Norwegian (Nynorsk)    1252  850
Polish    Polish       1250  852
Portuguese   Portuguese (Brazil)    1252  850
Portuguese   Portuguese (Portugal)   1252  850
Punjabi    Punjabi       0   1
Romanian   Romanian      1250  852
Russian    Russian       1251  866
Sanskrit   Sanskrit      0   1
Serbian (Cyrillic) Serbian (Cyrillic)    1251  855
Serbian (Latin)  Serbian (Latin)     1250  852
Slovak    Slovak       1250  852
Slovenian   Slovenian      1250  852
Spanish    Spanish (Argentina)    1252  850
Spanish    Spanish (Bolivia)    1252  850
Spanish    Spanish (Chile)     1252  850
Spanish    Spanish (Colombia)    1252  850
Spanish    Spanish (Costa Rica)   1252  850
Spanish    Spanish (Dominican Republic) 1252  850
Spanish    Spanish (Ecuador)    1252  850
Spanish    Spanish (El Salvador)   1252  850
Spanish    Spanish (Guatemala)    1252  850
Spanish    Spanish (Honduras)    1252  850
Spanish    Spanish (International Sort) 1252  850
Spanish    Spanish (Mexico)    1252  850
Spanish    Spanish (Nicaragua)    1252  850
Spanish    Spanish (Panama)    1252  850
Spanish    Spanish (Paraguay)    1252  850
Spanish    Spanish (Peru)     1252  850
Spanish    Spanish (Puerto Rico)   1252  850
Spanish    Spanish (Traditional Sort)  1252  850
Spanish    Spanish (Uruguay)    1252  850
Spanish    Spanish (Venezuela)    1252  850
Swahili    Swahili       1252  437
Swedish    Swedish       1252  850
Swedish    Swedish (Finland)    1252  850
Syriac    Syriac       0   1
Tamil    Tamil       0   1
Tatar    Tatar       1251  866
Telugu    Telugu       0   1
Thai    Thai       874   874
Turkish    Turkish       1254  857
Ukrainian   Ukrainian      1251  866
Urdu    Urdu       1256  720
Uzbek (Cyrillic) Uzbek (Cyrillic)    1251  866
Uzbek (Latin)  Uzbek (Latin)     1254  857
Vietnamese   Vietnamese      1258  1258
# n | a
  - a는 n의 배수이다.
 
# a mod n
  - a를 n으로 나누었을 때 나머지 값
 
# a ≡ b mod n
  - a와 b는 n으로 나누었을 때 그 나머지가 같다. (a와 b는 합동이다)
 
# 모듈러 연산의 특성
  - a ≡ b mod n 이면, a - b는 n의 배수이다. -> (a - b) mod n = 0
  - mod n = Zn = { 0, 1, ..., n - 1 }
 
# 모듈러 연산 법칙
  - [(a mod n) + (b mod n)] mod n = (a + b) mod n
  - [(a mod n) - (b mod n)] mod n = (a - b) mod n
  - [(a mod n) x (b mod n)] mod n = (a x b) mod n
 
# Galois Fields - GF(p) [아직 명확히 이해 못함. 위수가 단순히 원소의 개수인 것인지... 유한체는 뭔지...]
  - 소수 p에 대하여 위수가 p인 유한체
  - GF(p)는 정수 { 0, 1, ..., p-1 }의 집합 Zp로 정의
  - p가 소수이므로 Zn상의 모든 정수들에 대해 곱셈의 역원이 존재함

회사에서 세미나하는 내용인데 번개같이 넘어가는 바람에 뭔말인지 모르겠어요. ㅋㅋㅋ
이해도 할겸 복습하며 예문 위주로 정리합니다.
내가 이해한대로 정리한거라 틀릴수도 있으니 책임은 못 집니다.

# GCD(a, b) : a와 b의 최대 공약수 (Gratest Common Divisor)

ex) GCD(49, 21) = 7

# 서로소 : GCD(a, b) = 1 인 정수 a와 b를 서로소라 한다

ex) GCD(5, 7) = 1
ex) GCD(6, 11) = 1
ex) GCD(10, 21) = 1

# 소수 : 1 과 자신만으로 나누어지는 1보다 큰 양의 정수

ex) 2, 3, 5, 7, 11, 13, ...

# 합성수 : 소수가 아닌 양의 정수 (1과 자신 이외에 다른 값으로 나누어지는 자연수)

ex) 4, 6, 8, 9, 10, 12, 14, 15, ...

# 모든 정수(n > 1)는 소수의 곱만으로 표현할 수 있으며, 순서를 무시한다면 그 표현방법은 유일하다.

ex) 15 = 3 x 5
ex) 50 = 2 x 25 = 2 x 5 x 5
ex) 100 = 2 x 50 = 2 x 2 x 5 x 5

# 유클리드 알고리즘 : a = bq + r 이면 GCD(a, b) = GCD(b, r)

ex) 49 = 28 x 1 + 21 -> GCD(49, 28) = GCD(28, 21)
ex) 54 = 14 x 3 + 12 -> GCD(54, 14) = GCD(14, 12)

※ a를 b로 나눈 나머지(r)는 항상 최대 공약수의 배수이다. 따라서 b와 r의 최대공약수도 동일하다.

# 유클리드 호제법(互除法 : 번갈아가며 제거하는 방법)

유클리드 알고리즘을 반복적으로 적용하여 최대공약수를 구하는 방법

※ 나머지가 0 이면 작은 값이 최대 공약수

최대공약수 나머지 찾기
GCD(1020, 790) 1020 = 1 x 790 + 230
GCD(790, 230) 790 = 3 x 230 + 100
GCD(230, 100) 230 = 2 x 100 + 30
GCD(100, 30) 100 = 3 x 30 + 10
GCD(30, 10) 30 = 3 x 10 + 0

# 베주의 정의 (bezout's identity)

동시에 0이 아닌 두 정수 a, b에 대해서 GCD(a, b) = ax + by를 만족하는 정수 x, y가 존재한다.

# 확장 유클리드 알고리즘 : 베주의 정의 GCD(a, b) = ax + by의 해(x, y)를 구하는 방법

위 유클리드 호제법 풀이의 나머지 값 외에는 a, b를 대입할 수 있다.

이를 이용해 나머지가 최소공약수가 될 때 까지 나머지를 a와 b로 표현하는 방식으로 정리한다.

ex) 위 유클리드 호제법을 사용한 예제. 위 호제법 풀이의 오른쪽 풀어놓은 식에 대입

  • 1020 = 1 x 790 + 230 (위 유클리드 호제법의 풀이에서 가져온 식)
    • a = 1 x b + 230 (1020 = a, 790 = b)
    • 230 = a - (1 x b) = a - b (호제법의 나머지인 230을 기준으로 정리)
    • 따라서, 230 = a - b
  • 790 = 3 x 230 + 100 (위 유클리드 호제법의 풀이에서 가져온 식)
    • b = 3 x (a - b) + 100 (790 = b, 230 = a - b)
    • 100 = b - (3 x (a - b)) = b - (3a - 3b) = -3a + 4b (호제법의 나머지인 100을 기준으로 정리)
    • 따라서, 100 = -3a + 4b
  • 230 = 2 x 100 + 30 (위 유클리드 호제법의 풀이에서 가져온 식)
    • a - b = 2 x (-3a + 4b) + 30 (230 = a - b, 100 = -3a + 4b)
    • 30 = a - b - (2 x (-3a + 4b) = a - b - (-6a + 8b) = 7a - 9b (호제법의 나머지인 30을 기준으로 정리)
    • 따라서, 30 = 7a - 9b
  • 100 = 3 x 30 + 10 (위 유클리드 호제법의 풀이에서 가져온 식)
    • -3a + 4b = 3 x (7a - 9b) + 10 (100 = -3a + 4b, 30 = 7a - 9b)
    • 10 = -3a + 4b - (3 x (7a -9b)) = -3a + 4b - (21a - 27b) = -24a + 31b (호제법의 나머지인 10을 기준으로 정리)
    • 따라서, 10 = -24a + 31b
  • 10 은 GCD(1020, 790)의 해, 즉 최대공약수이므로 a와 b에 원래의 값을 대입하면
    • GCD(1020, 790) = -24 x 1020 + 31 x 790
    • a = 1020, b = 790 일 경우 GCD(a, b) = ax + by 를 만족하는 x와 y는

x = -24, y = 31

확인 : 1020 x -24 + 790 x 31 = -24480 + 24490 = 10

1.  http://sourceforge.net/projects/stlport/ 에서 STLport-5.2.1.tar.bz2 를 받는다.
2. 적당한 위치에 압축을 풀고 커맨드 창을 연다. (설명을 위해
 c:\stlport 에 푼 것으로 가정함)
3. Visual C++ 6.0 이 설치된 디렉토리 (C:\Program Files\Microsoft Visual Studio\VC98\Bin) 에서 VCVARS32.BAT 를 입력해서 환경설정을 해준다.

C:\Program Files\Microsoft Visual Studio\VC98\Bin>VCVARS32.BAT

4. c:\stlport\로 이동한다.

C:\Program Files\Microsoft Visual Studio\VC98\Bin>cd c:\stlport

5. configure를 실행한다. (configure --help 를 입력해보면 도움말이 나오니 참고)

C:\stlport>configure --help
C:\stlport>configure msvc6

6. c:\stlport\build\lib 로 이동하여 nmake clean install 을 입력한다.

C:\stlport>cd build\lib
C:\stlport\build\lib>nmake clean install

7. c:\stlport\build\test\unit 으로  이동하여 nmake clean install 을 입력한다. 

C:\stlport\build\lib>cd ..\test\unit
C:\stlport\build\test\unit>nmake clean install

8. 7번 과정에서 에러가 발생하는데 해당 위치의 테스트 코드가 잘못되어 있다.
 - test\unit\ctype_facets_test.cpp 파일의 430 라인을 다음과 같이 변경한 후 다시 7을 수행한다.

CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '?) );

CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '?') );

9. Visual C++ 의 Options -> Directories 에서 Include files의 최상단에  c:\stlport\stlport 경로를 추가하고, Library files에 c:\stlport\lib 경로를 추가한다.

참고 자료
STLport의 빠른 설치 가이드
- Visual Studio 6.0에 STLport 5.2.1 설치
- STLport 설치 및 사용 For VC6
- STLport와 boost를 VS.NET 2005에서 사용하기
- Visual C++ 2005에서 STLport 5.1.0 빌드
GDB 명령어에 대해 정리한 자료
http://freemmer.tistory.com/31
오늘 Doxygen을 다시 설치하면서 전에 겪었던 한글 깨지는 문제를 또다시 겪었다.
인터넷을 뒤져보니 다 정확하지 않은 답 뿐이다. 백날 DOXYGEN_ENCODING 값을 바꿔봤자 소용없더라... ㅡㅡ;

현재 버전에서 바뀐건지는 모르지만 소스 내용이 한글로 표현되게 하려면 DOXYGEN_ENCODING가 아니라 expert의 input에 들어가서 바꿔야 한다. EUC-KR로.

Visual Studio 에서는 기본적으로 소스파일의 인코딩이 EUC-KR로 되어있다. CP949로 해도 동일하지 싶으다.

아이폰이라 쓰기 힘드네... 자세한건 시간 생기면 그때.

iPhone 에서 작성된 글입니다.
난 정보통계학과를 나왔다.
따라서 전산학에 대한 지식은 거의 없는 편이지만...
아... 변명부터 하고 시작할랬는데, 생각해보니 선택교양과목으로 컴퓨터개론을 들었었다. ㅋㅋ

여튼 난 전산학 지식이 없는 건 맞다. 컴퓨터 개론 시간에는 친구들 대출 돌려막기가 유행했을 정도로 수업은 별 관심도 없었다. 그 당시만 해도 소프트웨어와 컴퓨터는 별개라고 생각했다.

리버스 엔지니어링을 해보려고 어셈블리를 좀 보다가 보니 2의 보수 얘기가 나왔다.
그래서 예전에 잠깐 들었던... 하지만 이해는 하지 못했던 내용.

그때 교수님의 설명은 이러했다.
"1은 0으로, 0은 1로 바꾸는 것이 1의 보수이고, 1의 보수에 1을 더한 것이 2의 보수입니다"
"2의 보수는 컴퓨터에서 뺄셈을 구현하는데 사용하니 알아 두셔야 합니다"

왜 1의 보수에 1을 더하는 것인지가 궁금해졌지만 책에 설명이 없어서 결국 그냥 머리속에서 지워버렸다.

그런데 오늘 어떤 블로거의 글에서 해답을 얻었다. 다음은 정확한 글은 아니고 기억에 의존해 쓴 글이다.
1byte를 예로 들면 제일 처음 1비트는 부호로 사용하고, 양수에 128가지 수, 음수에 128가지의 수를 둘 수 있다. 0은 표현해야 하니까 양수는 0부터 127까지, 음수는 -127부터 -0까지 하면 된다(1의 보수). 나는 이것이 좋지만 사람들은 0과 -0이 둘 다 사용된다는 것이 못마땅했나보다. 그래서 음수는 -128부터 -1까지로 정하였고, 양수보다 음수가 하나 더 많아졌다(2의 보수).(-128 ~ 127)
물론 더 검색을 해봤기 때문에 2의 보수가 뺄셈이 더 편해서 (계산 후 +1을 해줘야 한다) 그렇게 정했다는 글도 봤다. 하지만 나는 위 얘기가 이해가 더 잘되고 와 닿는다.

이 글 쓰면서 생각난건데, 만약 0과 -0이 따로 존재한다고 생각해보면 이건 또 zero hell 이 될 것 같다. 0과 -0은 수학적으로 같아야 하지만 비트는 분명 틀릴테니까.

뭐 이제 누가 나에게 2의 보수를 왜 쓰냐고 물어본다면 그냥 뺄셈 때문이라고 말하진 않을 것 같다.

참... 이건 내 생각인데, 2의 보수가 "2의 보수"라는 이름이 붙은 이유는 1의 보수에 1을 더하기 때문에 붙여진 이름이겠지? ㅡ_ㅡ;
윈도우에서 컨트롤의 크기 조절은 살짝 복잡하다.
내가 계속 MFC를 만지는 것이라면 항상 기억하겠지만 거의 만질일이 없다보니 계속 까먹어서...
정리해둬야지.

크기를 조절하는 데에는 4개의 함수가 쓰인다.

GetWindowRect() : 전제 화면을 기준으로 하는 위치. 즉 모니터의 좌측 상단이 (0,0) 이 된다.
GetClientRect() : 해당 윈도우의 그릴 수 있는 영역(클라이언트 영역이라고 함). 메모장이라면 텍스트를 입력하는 하얀 부분이 되겠다. 하얀 부분의 좌측 상단이 (0,0) 이 된다.
ScreenToClient() : WindowRect를 ClientRect로 바꿔주는 함수
MoveWindow() : 클라이언트 영역 내에서 윈도우(컨트롤)의 위치와 크기를 변경한다.

이 4가지를 이용하여 다음과 같이 컨트롤의 위치와 크기를 변경할 수 있다. 다음은 에디트 박스를 클라이언트 영역의 오른쪽에서 15, 아래에서 15만큼 떨어진 크기를 갖도록 하는 부분으로 OnSize에서 구현된 내용이다.

void CMyFormView::OnSize(UINT nType, int cx, int cy)
{
  CFormView::OnSize(nType, cx, cy);

  // TODO: 여기에 메시지 처리기 코드를 추가합니다.
  if(m_editLog.GetSafeHwnd() != NULL)
  {
    CRect editLogRect; // 에디트 박스의 영역
    m_editLog.GetWindowRect(editLogRect); // 에디트 박스의 스크린 영역을 구함

    // 에디트 박스의 스크린 영역을 CMyFormView 객체의 클라이언트 영역을 기준으로 변경
    ScreenToClient(editLogRect);

    CRect clientRect;
    GetClientRect(clientRect); // CMyFormView 객체의 클라이언트 영역을 구함

    editLogRect.right = clientRect.right - 15; // 클라이언트 영역의 오른쪽에 15픽셀의 공간을 둔다.
    editLogRect.bottom = clientRect.bottom - 15; // 클라이언트 영역의 하단에 15픽셀의 공간을 둔다.

    m_editLog.MoveWindow(editLogRect); // 에디트 박스의 수정된 위치를 적용함
  }
}

이거 보고 이해가 안된다면 별 수 없다.
그림까지 넣어서 설명하면 훨씬 이해가 잘 되겠지만, 지금은 회사라... ㅡ_ㅡ;;

갑자기 왠 벌레?
저놈은 벌레로 태어나 전세계 개발자들의 주둥이에 엄청난 영향을 끼친 녀석이다.
저 벌레가 Mark II 의 전선사이에 들어가 컴퓨터를 고장내지 않았다면 아마도 우리는 지금 버그, 디버깅이란 말을 사용하고 있지도 않겠지.

미국 스미소니언 박물관에 보관당하고 계신 벌레님이시다.

+ Recent posts