출처 : http://www.emh.co.kr/forum.pl?%C7%C1%B7%CE%B1%D7%B7%A1%B9%D6%B0%FC%B7%C3%C0%AF%B8%D3

Q: Have you heard about the object-oriented way to become wealthy?

A: Inheritance

(아마도 답에 대한 질문을 만든듯... 그래도 재밌다. :) )

출처 : http://blog.naver.com/kickthebaby/20150108743

이런 식의 반전이 재밌다 :)
얼마전 필요에 의해서 VMWare 7.1을 설치하고 우분투 10.10을 게스트OS로 설치했다.
작업할 게 있어서 Win7(호스트OS)의 특정 폴더를 공유 폴더로 설정하고 재부팅...
/mnt/hgfs가 비어 있었다.
vmware-tools 는 당연 설치되어 있었다.
(내가 설치한 것은 아니고 요즘 VMWare가 너무 좋아서 게스트OS설치할때 자동으로 설치된 것이다.)

$ vmware-hgfsclient 제대로 공유폴더를 보여준다.

무슨 문제인지 몰라서 구글링 시작

헛, vmware-tools의 버그란다. 그것도 아주 작은 버그...

출처 : http://blog.naver.com/bestbabo?Redirect=Log&logNo=90025401435
원출처 : http://www.debuntu.org/how-to-vmware-tools-hgfs-module-on-ubuntu-gutsy-gibbon-7.10

At the moment, the vmware-tools provided with workstation 6.0.2 do not compile under Ubuntu Gutsy 7.10.
Only one module fails: vmhgfs. This module allow one to share a folder on the host with the guest.

This tutorial will show the few changes required in order to be able to compile this module, and therefore ease file sharing between the host and the guest.

The original error that one might get while compiling the tools will have the following:

CC [M] /tmp/vmware-config0/vmhgfs-only/filesystem.o
/tmp/vmware-config0/vmhgfs-only/filesystem.c: In function ‘HgfsInitFileSystem':
/tmp/vmware-config0/vmhgfs-only/filesystem.c:582: error: too few arguments to function ‘kmem_cache_create'
/tmp/vmware-config0/vmhgfs-only/filesystem.c:593: error: too few arguments to function ‘kmem_cache_create'

In this tutorial, I will consider that the vmware-tools's .tar.gz is already untarred in your home dir and that user can gain root credential with sudo.

First of all, you need to get in the working directory of vmware-tools:

$ cd ~/vmware-tools-distrib

Then, we will back up the old vmhgfs.tar:

$ mv lib/modules/source/vmhgfs.tar vmhgfs.tar.orig

Now, we untar vmhgfs.tar.orig:

$ tar -xvf vmhgfs.tar.orig

Now edit vmhgfs-only/compat_slab.h:

$ vim vmhgfs-only/compat_slab.h

and change:

if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22) || defined(VMW_KMEMCR_HAS_DTOR)

with

if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 22) || defined(VMW_KMEMCR_HAS_DTOR)

Finally, re-tar vmhgfs-only directory in lib/modules/source/vmhgfs.tar:

$ tar -cvf lib/modules/source/vmhgfs.tar vmhgfs-only

Then copy this new tar into /usr/lib/vmware-tools/modules/source/ :

$ sudo cp lib/modules/source/vmhgfs.tar /usr/lib/vmware-tools/modules/source/vmhgfs.tar

That's it, now you can re-run the tools config script:

$ sudo vmware-config-tools.pl



이글에도 사소한 버그가 있었다.
compat_slab.h 는 vmhgfs-only/share/ 밑에 있다.
(이정도는 애교)

어쨋든, 상황종료.

기본 소스도 준비 됐고, 컴파일 환경도 준비 됐으면, 구동시켜보자.

서버부터,
사용자 삽입 이미지

아주 간단하다.

클라이언트도 실행해 보자.
사용자 삽입 이미지

클라이언트도 간단하다.
사실은 몇 번의 실패 과정이 있었다. 컴파일만 해 보고, 뭐하는 프로그램(?)인지 몰라서...
소스의 설명을 보고 실행파일 명(rpipe)을 이해했다.
클라이언트에서, 서버로 명령을 보내서 수행한 결과를 클라이언트쪽에 보여주는 프로그램이다.

좀 복잡해 보이긴 해도, 꽤나 단순한 프로그램이다.

여기서 우리에게 필요한 내용을 서버쪽에 추가해야 한다.

필요한 명령어 목록을 정해보자.
(서버는 클라이언트의 명령에 의해서만 움직인다. 이렇게 하는 것이 나중에 제어하고 확장하기 쉬워진다. 자세한 것은 나중에 여력이 되면 다시 설명하기로 하고... 일단 넘어가자.)

참참참....

이 서버의 내용에 대해서 전혀 설명이 있었다.
이 서버는 숫자야구 게임 서버이다.

하는 역할은 다음과 같다.

1. 클라이언트의 접속을 받아 들인다. (당연히 네트웍 서버이므로)
2. 게임을 만든다. (서버가 숫자를 생각!하여 기억하고 있는다.)
3. 클라이언트에서 숫자가 오면 볼카운트를 확인해서 다시 돌려준다.
  3-1. 이때의 볼 카운트는 당연히 2의 과정에서 기억하고 있는 숫자와 3에서 넘어온 숫자를 비교한 볼카운트이다.
  3-2. 이 과정을 반복한다.
  3-3. 세자리 숫자를 기본으로 한다. 따라서 돌려주는 결과가 3S인 경우에는 서버에 횟수를 기록하게 된다.
  3-4. 기록을 할 때에는 클라이언트에서 제시한 이름을 기준으로 한다. 즉, 1의 과정 이후에 클라이언트에서 자신을 판별하는 이름을 보내야 기록이 된다는 것이다. (이름이 없으면 기록하지 않는다.)

대충 이 정도이다.
이러면 전송해야 할 문자열도 대충 정해진다.

* C->S : NAME <client name>
  - S->C : OK
* C->S : START
  - S->C : OK
* C->S : 123
  - S->C : 1S2B
.... (반복) ....
* C->S : 132
  - S->C : 3S0B 8    (8번만에 맞췄다.)

나머지 필요한 부분은 나중에 추가하기로 한다.
일단은 여기까지.
간단한 네트웍 서버를 만들 계획입니다.
목적은 간단합니다.
재미

재밌지 않다는 친구들이 몇 있었습니다.
그래서 그 친구들과 재밌는 일을 꾸며볼 수 있게 기반을 만들 겁니다.

이 서버는 그 작업을 위한 첫 단계입니다.

요구사항1
1. 간단한 리눅스 TCP서버
2. 인터넷 접속이 가능할 것
3. 테스트가 가능하게 TEXT데이터 전송할 것
4. 개인별기록을 남겨 둘 것
5. 인증기능 없음 (자유롭게 이용 가능, 단, 부하걸면 죽음!!!)

우선은 1단계 부터 진행할 계획. 진행하면서 더 필요한 것이 있으면 추가하지.
다음은 1단계 진행 후 확장할 내용. 언제인지는 모르겠지만...

요구사항2
1. DB(gdbm or mysql) 사용
2. Web Interface (CGI)
3. 실시간 통계
우선 기본이 되는 Socket Server를 찾는 것부터 시작했다.
(처음 부터 만들면 되긴 하지만, 조금 귀찮다. 괜찮은 서버를 하나 찾아서 수정하면서 시작하자.)

찾는 샘플의 조건:
1. blocking socket : 서버가 단순해 진다.
2. fork 버전 : 서버 관리및 운영이 단순해 진다.
3. 언어불문 : 가능하면 C/C++
4. client 테스트 버전이 있으면 우대(?)

구글링으로부터 시작했다.
socket sample
역시나 많이 나온다.
첫번째 자료를 본다.
훌륭하다.

흠... 아직 서버를 준비 안했다.
내부 서버를 만들어서 소스를 붙여 넣고 컴파일 한다.
http://www.cs.uic.edu/~troy/fall99/eecs471/socksample/samples.html

몇가지 문제가 있다.
C++소스긴 한데, cerr밖에는 C++이지 않다.
과감하게 C로 바꾼다.


줄이 좀 안맞는 것은 용서~~

테스트를 위한 클라이언트 소스도 있다.



여기에 Makefile만 있으면 컴파일 준비 완료


여기까지하면 기본적인 준비 완료.

보통 ext3로 포맷을 하게되면, 시간이 무지 오래 걸린다.
지금 하고 있는 프로젝트에서 사용하려고 하니, 하세월이다.

KLDP에 있는 Quick Format은 ext3가 아닌 ext2용 inode를 만들기 때문에, 금방 끝나긴 하지만, ext2로 mount해야한다.
더 좋은 방법(?)은 생성되는 inode의 수를 줄여준다. 물론, 파일을 많이 만들 수는 없다. 하지만 금방 끝난다...

1. e2fsprogs의 소스를 받아서,
2. misc/mke2fs.c의 main()위에 있는 PRS()함수를 찾는다.
3. 거의 아랫부분의 param.s_inodes_count의 값을 계산하기 바로 위에,
4. num_inodes = 1; reserved_ration = 1; 값을 강제적으로 세팅했다.
5. 결론적으로 원래 만들어 져야 할 inode의 수보다 1/512배 만큼의 inode가 만들어진다.

포맷도 빠르고, ext3를 사용할 수 있어서 좋다.
단점은 파일을 많이 만들 수 없다는 것...

VisualC++1.0이 처음 나온게 1993년(?)경으로 기억된다. 하지만, MFC의 버전은 2.0이었다. 즉, 그 이전의 버전부터 MFC는 존재 했었고, Visual C++과 버전이 일치하지 않았다.
이의 혼란으로 Visual C++ 3.0이 나오지 않고 바로 4.0이 나왔었다. 드디어 MFC버전 4.0과 딱 맞아 떨어졌다.
하지만, 이도 잠시, 계속해서 버전이 올라가는 VisualC++버전을 MFC버전이 따라가질 못했다. 어쩔 수 없이 다시 버전을 맞추기로 한다.
이번에는 MFC5.0을 건너뛰고, MFC6.0이다 하지만 dll은 여전히 mfc42.dll이다.
아마도 가장 오래 사용한 MFC Dll이 바로 mfc42.dll이었던 것 같다. 하지만, 이때에도 MFC버전은 6.0이었다.

그래서, 생각난 김에 MFC버전, MFC dll, Visual C++버전을 정리해 본다.

MFC 버전 Visual C++ 버전

1.0

Microsoft C/C++ 7.0

2.0

Visual C++ 1.0

2.5

Visual C++ 1.5

3.0

Visual C++ 2.0

3.1

Visual C++ 2.1

3.2

Visual C++ 2.2

4.0

Visual C++ 4.0

4.1

Visual C++ 4.1

4.2

Visual C++ 4.2

4.21(mfc42.dll)

Visual C++ 5.0

6.0(mfc42.dll)

Visual C++ 6.0

7.0(mfc70.dll)

Visual C++ .NET 2002

7.1(mfc71.dll)

Visual C++ .NET 2003

8.0(mfc80.dll)

Visual C++ 2005


결론적으로 Orcas는 MFC9.0이겠지? (아직 확인은 해보지 않았다.)

참고 : MSDN

정상적인 도메인네임을 구분하기 위해서 정확한 룰을 찾아봤다.

다음의 규칙을 만족해야만 한다.

1. 문자, 숫자, "-"(hyphen) 만을 사용할 수 있다.
2. sub domain의 구분은 "."으로 한다.
3. 시작과 끝은 반드시 문자나 숫자여야 한다. ("-"이 처음이나 끝에 올 수 없다)
4. 전체 길이(sub domain의 전체를 포함)는 64자까지 허용한다.
5. 대소문자를 구분하지 않는다.

의외로 단순하다.
이 조건으로는 IP Address도 포함 할 수 있으므로, 오류검사하는 데 사용하면 좋겠다.

(참고: 구글검색결과)

+ Recent posts