chen_p5-sosp.pdf

The measured performance of personal computer operating system


What every programmer should know about memory.pdf

What every programmer should know about memory


준비. 준비.

Trackback Address :: http://zsimi.tistory.com/trackback/190

댓글을 달아 주세요

환경설정 수정하기. (CVS경로 설정)

CVS에서 체크아웃하기.

톰캣에 deploy하기.

cvsdeploy.sh 쉘 스크립트

Trackback Address :: http://zsimi.tistory.com/trackback/189

댓글을 달아 주세요

■ VBA
오늘 엑셀 작업을 할 일이 있어서 오랜만에 VBA를 짰다. 일회용으로 쓸 꺼라서 그냥 자동으로 생성되는 코드를 사용하기만 했다.

■ Greasemonkey와 자바스크립트
그러다가 웹 페이지에서 특정 수치를 긁어서 엑셀로 복사 붙여넣기를 해야하는 작업이 생겼다. (그것도 많이!) 똑같은 작업을 자동화 하는게 프로그래머의 임무라고 생각해서, 단순 노동을 하지 않고 Greasemonkey를 사용해서 자바스크립트로 해결 하려고 시도 하였다.

결과적으로는 단순 노동 보다 시간이 더 걸렸던것 같다. 자바스크립트가 손에 익지 않아서 일 것이다. (js는 아무리 해도 적응하기 힘들다.) 아무튼 일회용 코드이고, 기존 소스가 굉장히 더러운 소스였기 때문에 (태그별로 id가 전혀 없다) 위치를 통해서 객체를 얻고 그 객체의 문자열을 클립보드에 복사하는 스크립트를 짰다. 하지만 클립보드로 복사하는 코드가 익스플로러 밖에 안되서 좌절. (-_-;) 할 수 없이 그냥 아래와 같이 해당 숫자를 끊어서 링크가 안 걸린 순수 문자열을 복사하기 좋은 위치에 추가 시키는 스크립트로 만족했다.

var elPageView=document.elementFromPoint(623,206)
var strPV = elPageView.innerHTML.replace(/,/g,'')

var elP = document.createElement("p");
elP.innerHTML = strPV

elPageView=document.elementFromPoint(250,50)
elPageView.appendChild(elP)

'딱딱한것 > IT/프로그래밍' 카테고리의 다른 글

서버의 CVS에서 직접 deploy 하기.  (0) 2008/07/28
VBA와 자바스크립트  (2) 2008/07/15
MFC와 DX, 그리고 채팅 프로그램 만들기.  (2) 2008/06/29
리눅스 설치.  (0) 2008/06/24

Trackback Address :: http://zsimi.tistory.com/trackback/188

댓글을 달아 주세요

  1. 성기 2008/07/22 07:53 주소 수정 답글 달기

    프로그래밍 다시 짤생각하니 눈물이 앞을 가리네요...

    • 2008/07/22 22:39 주소 수정 BlogIcon 시미

      난 전역하고 학교 복학할때
      기뻐서 눈물이 앞을 가렸는데

■ MFC+DX를 이용하는 서버/클라이언트 방식의 채팅 프로그램
과제가 있어서 위와 같은 긴 컨셉으로 프로그램을 만들었다. 이 프로그램을 만들면서 새롭게 알게 된 것과 잘못 알고 있었던 사실에 대한 정리.

■ MFC에 DX 올리기.
hr = m_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
        GetDlgItem(IDC_RENDERVIEW)->GetSafeHwnd(),
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &m_d3dpp, &m_pD3DDevice );
여기서 윈도우의 핸들(HWND)를 주면 그곳으로 D3D를 렌더링 할 수 있다고 생각하고 ListBox 컨트롤을 만들어서 채팅 프로그램을 대충 다 만들고, 그 ListBox 컨트롤의 핸들을 넘겨 줬는데. 렌더링이 되지 않았다. 예제를 찾아서 연구(?)한 결과 Picture 컨트롤을 만들고 따로 변수를 만들필요 없이 위에서 한 것처럼 컨트롤 이름으로 핸들을 받아서 d3ddevice를 생성하면 된다.
사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지

Trackback Address :: http://zsimi.tistory.com/trackback/185

댓글을 달아 주세요

  1. 굳샷임돠 2008/08/13 13:50 주소 수정 답글 달기

    ㅋㅋ

(리눅스) 우분투 서버 배포판 설치할때 항상 하는 일. (서버는 데스크탑 배포판에서 GUI인 그놈만 뺀 배포판)

  1. ubuntu-8.04-server-i386.iso 를 다운, 설치.
  2. sudo apt-get install ssh
  3. sudo vi /etc/ssh/sshd_config 수정(port 22 에서 포트 수정)
  4. sudo /etc/init.d/ssh restart 로 ssh서버 재시작
  5. netstat -ntl 서버 작동 확인. 포트 22가 LISTEN 상태면 OK.
  6. sudo apt-get install gcc
  7. sudo apt-get install build-essential
  8. sudo apt-get update
커널 소스 다운로드와 컴파일
  1. sudo apt-get install linux-kernel-devel fakeroot
  2. sudo apt-get build-dep linux-source
  3. cd /usr/src
  4. sudo apt-get install linux-source
  5. sudo tar -xjvf linux-source-2.6.24.tar.bz2
  6. ln -s linux-source-2.6.24 linux
  7. cd /usr/src/linux
  8. cp -vi /boot/config-`uname -r` .config
  9. apt-get install libncurses5 libncurses5-dev # to use 'make menuconfig'
  10. make menuconfig
  11. make clean
  12. make-kpkg --initrd --stem linux --revision=custom.1.0 kernel_image kernel_headers
  13. cd /usr/src
  14. dpkg -i linux-headers-2.6.14.6_10.00.Custom_i386.deb
  15. cat /boot/grub/menu.lst

Trackback Address :: http://zsimi.tistory.com/trackback/181

댓글을 달아 주세요

■ 링크와 컴파일.
컴파일 후 목적 파일(obj)이 생긴다. 목적 파일은 헤더파일에 기록된 함수의 사용법이나 함수의 형식만 알고 있을뿐 다른 파일에 있는 함수의 실제 구현은 알지 못한다. 링크는 그런 목적파일들을 모아서 실행파일로 만들어 주는 것이다. 즉 말그대로 링크는 최종 실행파일을 만들기 위해 각 파일들에 연결되어 필요한 부분들을 찾아서 연결하는 작업이다. 완전히 링크하여 실행파일을 만드는 것을 정적링크라고 하고, 프로그램 실행중에 외부에 존재하는 필요한 목적코드를 찾아서 연결하는 것이 동적링크 이다.

■ static 함수
모듈 프로그래밍을 할 때, 이 함수가 모듈 안에서만 사용되고 다른 커널에서 참조할 필요가 전혀 없다면 static 으로 만든다. (init_module()과 cleanup_module()은 예외적으로 static을 하지 않아도 커널 영역에 공개되지 않는다. 자동으로) 커널 영역에 공개된 함수는 /proc/ksyms (커널 2.6에선 kallsyms)에서 확인할 수 있다. static은 원래 변수가 프로그램에서 가장 먼저 초기화되어 전역변수처럼 변수값이 유지된다. 함수 앞에 static이 붙으면 그 함수는 해당 파일에서만 사용되는 함수가 된다. (다른 함수에서 extern 으로 그 함수를 사용하려고 해도 static함수는 쓸 수 없다.)
한 줄 요약: static 함수는 이 함수를 이 파일에서만 쓰겠다는 뜻. (다른 파일에서는 못 씀)

'딱딱한것 > IT/프로그래밍' 카테고리의 다른 글

리눅스 설치.  (0) 2008/06/24
(커널)모듈 프로그래밍에서 링크, static  (1) 2008/06/07
HLSL without Effects(임시)  (4) 2008/06/05
Rendering Water Caustics  (0) 2008/05/29

Trackback Address :: http://zsimi.tistory.com/trackback/175

댓글을 달아 주세요

  1. simi 2008/06/09 14:45 주소 수정 답글 달기

    http://staruml.sourceforge.net/docs/user-guide(ko)/toc.html
    스타UML사용자 가이드

사용자 삽입 이미지

텍스쳐 효과가 아닌 정점이 직접 움직인다.

사용자 삽입 이미지

원래는 그냥 평면. 가운데는 왜 검지?

■ DX SDK 샘플들 중에서 HLSLwithoutEffects에 대한 세미나 발표 후 내용 정리. 아직까지는 임시변통적으로 키워드만 나열한 상태이므로 집중해서 읽을필요는 없음. 다음 주(가능하다면)에 정리해서 자세히 설명하겠음.

■ 일단 오늘 새롭게 뇌에 주입된 주제.
(1) GLUT를 모방한 것처럼 보이는 <DXUT> 이제 DirectX SDK 샘플들은 모두 DXUT바탕이 될 듯. 즉, GLUT처럼 콜백함수를 등록하는 방식으로 윈도우 생성이나 함수들을 등록하여 쉽게 DX를 배울 수 있다. 역시 점점 쉬워지는 구만.
(2) <HLSL>의 함수에 정점 정보를 넘겨주면 HLSL에서정점의 위치와 색을 변경할 수 있다.
(3) g_Camera에 대한 것.
(4) g_HUD에 대한 것. HUD는 무슨 뜻?
(5) 인덱스버퍼를 채우는 것에 대한 것.
(6) XZ평면에 놓인 직사각형의 면을 꿀렁꿀렁하게 하는(즉 Y좌표를 변화) 효과에 대한 것.

HLSLwithoutEffects.cpp파일의 OnResetDevice()

HLSLwithoutEffects.vsh파일 안의 HLSL코딩(면을 꿀렁꿀렁하게 만드는 Ripple() 함수)

HLSL에서 정점의 위치를(Output.Position) 바꿀 수 있는것 같다.
ConstantTable, HLSL, FVF없이 x와 y만 있는 vertex. 그후 HLSL의 Ripple함수에 정점을 넘겨줌.
HLSL의 Ripple 함수 내에서 넘겨받은 정점의 위치를 수정함.

XZ평면에 놓인 정사각형의 물체를 각 프레임 마다 Y축 방향으로 꿀렁꿀렁하게 만드는 프로그램이다. 꿀렁꿀렁한 것은 원래 평면과의 거리와 시간에 기초한다. 시간은 매 프레임마다 계속 증가한다. 왜냐하면 Y좌표와 정점의 색은 각 프레임마다 생성되기 때문이다. 그것들은 저장이 필요없다. 그러므로 정점정의(the vertex declaration)은 오직 D3DXVECTOR2만 포함된다. (X와 Z좌표로 이루어진.)
(주석: FVF를 안쓰고 X와 Z의 2개의 벡터만 사용한다. 근데 위의 소스에서는 x와 y의 값을 사용한다. 뭥미?)

초기화하는 동안, D3DXCompileShaderFromFile()로 파일로 부터 셰이더를 읽어 컴파일한다. 그 후에 ID3DXBuffer은 셰이더 코드와 ID3DXConstantTable을 포함한다. (ID3DXConstantTable은 App가 셰이더가 만든 전역변수를 얻고 설정하도록 허용한다.) 그리고 IDirect3DDevice9::CreateVertexShader를 호출한다.

FrameMove() 에서는 ID3DXConstantTable 인터페이스를 사용한다 (셰이더의 전역 변수들인 mViewProj과 fTime을 설정하기 위해, 그리고 view+projection transformation과 셰이더를 위한 time parameter를 업데이트 하기 위해) 렌더링 할때 이 샘플은 IDirect3DDevice9::SetVertexShader를 호출한다. SetVertexShader 함수는 디바이스에 버텍스 셰이더 렌더링이 가능하도록 키는(enable) 하는 것이다. IDirect3DDevice9::DrawIndexedPrimitive가 호출된 이후, 정점 셰이더는 버텍스 처리가 있을때마다 한번씩 불러지게 된다.

버텍스 쉐이더는 HLSLwithoutEffects.vsh 이 파일에 텍스트 형식으로 써 있다. 이 파일에는 두 개의 전역변수와 한 개의 셰이더 함수가(Ripple()) 있다. Ripple() 함수는 float2(정점의 X와 Z)을 받아서 2개의 float4를 리턴한다. 리턴하는 이 변수는 화면공간의 위치와 정점의 색을 나타낸다. Y좌표는 아래의 함수에 의해 매번 생성된다. 

Y = 0.1 * sin( 15 * L * sin(T) );

L은 정점과 Y가 조정되기 전 과의 거리이다. 즉 L은 루트(X제곱+Z제곱)의 값이다. 왜냐하면 정점들은 XZ평면 위에 있기 때문이다. T는 전역변수 fTime이다. sin(시간) 이니까 시간이 지나감에 따라서 sin 그래프 처럼 꿀렁꿀렁 해지는 것 같다.

정점의 색은 아래의 함수에 의해서 명암이 결정된다.

C = 0.5 - 0.5 * cos( 15 * L * sin(T) );

C는 RGBA(0~1의 범위).  (각 정점마다)검정에서 흰색으로의 색이 나온다. 그래서 명암이 꿀렁꿀렁하게 보이게 된다.

Trackback Address :: http://zsimi.tistory.com/trackback/172

댓글을 달아 주세요

  1. 현기쿤 2008/06/06 01:48 주소 수정 답글 달기

    D3DXVECTOR2( ((float)x / (float)(VERTS_PER_EDGE-1) - 0.5f) * D3DX_PI,

    이거 괜히 파이 들어있어서 꾸물꾸물하게 하는것 같았는데;;
    아니네 ㅋㅋ

    • 2008/06/06 12:52 주소 수정 BlogIcon 시미

      그러게. 왜 이렇게 되는지 연구(?) 하고 있으니까 다음주를 기대해. 후후.

  2. 현기쿤 2008/06/11 03:38 주소 수정 답글 달기

    예전에 내꺼 hlsl without effect 컴파일 할때
    __in, __out 때문에 컴파일 에러 났던적 있잖아 그게
    구글에서 검색해본 결과
    windows platform sdk 최신버전을 깔아야 한다는군~

    http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en

    에서 다운 받을수 있음~

    • 2008/06/15 22:35 주소 수정 BlogIcon 시미

      platform sdk 면 VS 설치할때 깔리는거 아냐? 그런 하위 호완성도 없이 특성 타도록 DX를 만들다니. MS가 점점 하위호완성을 무시하는것 같애. 비스타도 그렇고, 말이야. 쯧쯧.

■ 의사코드.
  1. Paint the ocean floor.
  2. For each vertex in the fine mesh:
    a. Send a vertical ray.
    b. Collide the ray with the ocean's mesh.
    c. Compute the refracted ray using Snell's Law in reverse.
    d. Use the refracted ray to compute texture coordinates for the "Sun" map.
    e. Apply texture coordinates to vertices in the finer mesh.
  3. Render the ocean surface.

참고) refract: 굴절시키다. ray: 광선.
주석) 이 알고리즘 에서는 물을 통과하는 굴절광을 계산하는것이 핵심이다.

■ OpenGL로 구현한 코드.

'딱딱한것 > IT/프로그래밍' 카테고리의 다른 글

HLSL without Effects(임시)  (4) 2008/06/05
Rendering Water Caustics  (0) 2008/05/29
파일 입출력과 상수 벡터 인자.  (0) 2008/05/28
STL의 반복자.  (0) 2008/05/25
TAG 3D, OpenGL, water,

Trackback Address :: http://zsimi.tistory.com/trackback/170

댓글을 달아 주세요

■ 파일 입출력.
#include<fstream> //for file in/output
ofstream file; //output file stream의 약어인것 같다.

    file.open("c:\\result.txt");

    cout << "출력할 문자열" << endl;
    file << "출력할 문자열" << endl;

    file.close();
뭐 어렵지 않다. 사용법도 cout 과 똑같다.

■ 질문) 왜 함수의 parameter로 const vector 를 쓸 수 없을까? 함수안에서 iterator 쓰는 순간 그것은 상수 객체가 될 수 없는 것일까?

예를들어
void OutputData(vector<int> L, vector<int> S, vector<int> NS) {
    vector<int>::iterator it;
   
    cout << "Searched = ";
    file << "Searched = ";
    for( it=S.begin() ; it!=S.end() ; it++) {
        cout << "v" << *it << " ";
        file << "v" << *it << " ";
    }
    cout << endl;
    file << endl;
}
이런식의 함수를
void OutputData(const vector<int> L, const vector<int> S, const vector<int> NS) {
하면 에러가 난다. 내가 뭘 잘못했나? 내가 뭘 놓치고 있는 걸까?

'딱딱한것 > IT/프로그래밍' 카테고리의 다른 글

Rendering Water Caustics  (0) 2008/05/29
파일 입출력과 상수 벡터 인자.  (0) 2008/05/28
STL의 반복자.  (0) 2008/05/25
이중포인터  (0) 2008/05/22

Trackback Address :: http://zsimi.tistory.com/trackback/168

댓글을 달아 주세요

보통 반복문을
for(int i=0 ; i<10 ; i++)
이런 식으로 사용 하듯이.

iterator도 first에서부터 last까지라고 하면 last는 포함이 되지 않는다. 그래서 .begin() 함수는 실제로 있는 데이터를 가리키지만, .end()는 이미 꼬리를 지난 마지막을 나타낸다. 그래서 아래와 같은식으로 사용한다.
for( it=notSearched.begin() ; it!=notSearched.end() ; it++)
이런식으로 .end()가 아닐 동안 돌아도 전 자료를 다 돌 수 있다.

그래서 it = find(inVector.begin(), inVector.end(), element); 과 같이 find문의 결과도 찾은 결과가 있으면 해당 원소의 iterator가 반환되고 결과가 없으면 .end() 즉, 마지막 iterator가 넘어오게 된다. 그러니까 아래 처럼 쓰면 된다.
it = find(inVector.begin(), inVector.end(), element);
    if( it == inVector.end() )
        return 0; //없음.
    else
        return 1; //있음.

'딱딱한것 > IT/프로그래밍' 카테고리의 다른 글

파일 입출력과 상수 벡터 인자.  (0) 2008/05/28
STL의 반복자.  (0) 2008/05/25
이중포인터  (0) 2008/05/22
루아 문법 규칙.  (2) 2008/05/18

Trackback Address :: http://zsimi.tistory.com/trackback/165

댓글을 달아 주세요