http://www.android.com/




http://java.sun.com/javase/downloads
JDK 6 Update 16



http://www.eclipse.org/downloads
Eclipse IDE for Java Developers

you may download the compressed file(zip or tar) and just uncompress it on your system.
if you see the message box below ...

사용자 삽입 이미지


















you may edit eclipse.ini file like below. (you need to add the path of JDK installed)

-vm
C:\java\jdk\bin\javaw.exe



http://developer.android.com/sdk/


you need to download a compressed file(zip or tar) and uncompress it on your system.
you need to add the path of tools (sub driectory of the uncompressed file) on your system.

1) windows (i will add it later -_-;)
2) unix/linux/osx
you may edit .bashrc (or .bash_profile) file.

export PATH=$PATH:THE_PATH_YOU_NEED_TO_ADD






installation Android Development Tools Plug-in
1. run Eclipse and open menu [Help]-[Install New Software...]

사용자 삽입 이미지



2. fill the "Work with: " field using "Add" button. and check "Developer Tools"

사용자 삽입 이미지



3. restart Eclipse after installation. and add the path of Android SDK
from the menu [Window]-[Preferences]

사용자 삽입 이미지



















select "Android" on the left side and set the "SDK Location".

[+]
[Window] - [Android SDK and AVD Manager]
select "Available Packages" on the left tab.
and select all or some what you install on the right tab. then gogogogo





oooooooops !!! it's kae-sap-zil to upload images T.T
:

select 함수

프로그래밍 2009. 11. 10. 00:07 |

select 함수

2개 이상의 입출력을 처리하기 위해서는 어떻게 해야할까 ...
IO 개수만큼 프로세스 혹은 쓰레드를 생성하여 그것을 처리하게 만들 수 있다.
하지만 select 함수를 사용하면 비교적 쉽게 이 문제를 해결할 수 있다.


#include <sys/select.h>

int select(int nfds , fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);

FD_CLR(int fd, fd_set *set);
FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);


파라미터
nfds
; 입축력 파일 디스크립터의 범위를 표현한다.
ndfs 는 체크할 파일 디스크립터 집합의 최대 값보다 1 큰 값으로 지정한다.

readfds ; 입력 체크를 위한 파일 디스크립터 집합을 저장한다.
fd_set 은 정수 배열을 가지고 있으며, 비트 마스크로써 체크할 파일 디스크립터를 표시해 둔다.

writefds ; 출력 체크를 위한 파일 디스크립터 저장.

errorfds ; 에러에 대한 체크

timeout ; select 함수가 블록되는 시간, NULL 이 되면 입력이 있을 때까지 계속 블록된다.

반환값 ; 성공 시, 준비된 파일 디스크립트 수
실패 시, -1 을 리턴하며, errno 를 설정함.

errorno
- EBADF ; 사용 불가한 파일 디스크립터가 하나 이상 존재
- EINTR ; 시그널에 의한 인터럽트
- EINVAL ; 시간 제한이 잘못되었거나, nfds 가 0 보다 작거나 FD_SETSIZE 보다 큼.



구버전 UNIX 는 select 함수가 sys/time.h 에 정의 되어 있지만,
POSIX 표준은 sys/select.h 에 있음.

잘 쓰여진 글
http://cyhome.cyworld.com/?home_id=a2103157
싸이월드라 막혀 있다면 그 대신
http://jangsalt.tistory.com/entry/C-%EC%96%B8%EC%96%B4-select-%ED%95%A8%EC%88%98

:

pthread 관련 링크

프로그래밍 2009. 11. 9. 23:57 |
:
3차 베지어 커브 일반식 유도

혹자는 왜 하필이면 3차 베지어 커브이냐 ... 라고 궁금증을 가질 수도 있지만,
대부분의 폰트는 3차 이하의 베지어 커브들로 구성된다는 점,
3차 베지어 커브이면 원에 가까이 근사할 수 있다는 점 등이 그 이유일 것이다.
실제로 베지어 커브로는 완벽한 원을 만들 수 없다.

따지고 보면 1차 베지어 커브(사실은 직선)로도 원하는 모양을 만들 수 있긴 하다.
물론 이건 매우 비효율적이다. 어차피 픽셀로 표현되는 컴퓨터 나라에서 곡선이란 게 무의미 할 수도 있다.
아무튼 그건 그거고 ...

3차 베지어 커브의 일반식을 유도하기 위한 조건은 다음과 같다.
1. 컨트롤 포인트는 4개이다. (P0, P1, P2 and P3)
2. 곡선은 첫번째 포인트와 마지막 포인트를 지난다.
3. 곡선의 첫 지점에서의 기울기는 P0P1 을 이은 직선의 기울기의 3배이다.
4. 곡선의 마지막 지점에서의 기울기는 P2P3 을 이은 직선의 기울기의 3배이다.


위 사실에 근거하여,
3차 식을 다음과 같이 u에 대한 3차 식으로 두고,

사용자 삽입 이미지





이놈을 매트릭스로 표현하면,
사용자 삽입 이미지






즉,
사용자 삽입 이미지





그리고 미분한 식은 다음과 같다.
사용자 삽입 이미지





위 조건 1,2,3,4 를 적용하여 보면,
사용자 삽입 이미지


사용자 삽입 이미지


사용자 삽입 이미지


사용자 삽입 이미지





사용자 삽입 이미지
이 식에서

사용자 삽입 이미지
로 치환하면, 다음과 같다.

사용자 삽입 이미지



조건 1,2,3,4 로부터 유도된 식으로부터
사용자 삽입 이미지

사용자 삽입 이미지
를 구할 수 있고, 값은 다음과 같다.

사용자 삽입 이미지
사용자 삽입 이미지









사용자 삽입 이미지
라고 치환하면,

사용자 삽입 이미지
이렇게 되고,

고로,
사용자 삽입 이미지
다음을 통해서 b(u) 를 구할 수 있다.








이제 다 끝났다.
사용자 삽입 이미지


이었으므로, 다음과 같은 일반항이 도출된다.
사용자 삽입 이미지







references :
http://en.wikipedia.org/wiki/B%C3%A9zier_curve
Interactive Computer Graphics 2nd Edition (Addison Wesley) p434-436

수식 편집 :
http://www.codecogs.com/


아놔 심플 ~ 수학 공식 쓰기 캐노가다 ㅜㅜ


:

베지어 커브 (Bézier curve)

베지어 커브는 1962년 프랑스 엔지니어인 Pierre Bézier에 의해 만들어 졌는데,
이 커브는 그가 자동차 차체를 디자인 하기 위한 목적으로 사용한 커브였다.

이 커브는 몇 개의 조절점(Control points)들로 구성되며,
조절점들은 a parametric mathematical function에 의해 커브 모양을 결정한다.
커브의 차수는 "조절점의 개수-1"차로 결정되는데, 다음 공식에 의해
커브를 구성하는 점들의 위치가 결정된다

사용자 삽입 이미지








조절점 중 처음과 끝 점은 곡선을 지나가고, 나머지는 어느 곡선과 만나지 않는다.
곡선은 조절점으로 이루어진 다각형을 벗어나지 않는다.
조절점이 하나 뿐이면 그냥 점이다.
조절점이 두 개이면 직선이다.

조절점이 3 개인 경우는 다음과 같이 2차식이 된다.
B(t) = P0 * ( 1 - t ) 2 + P1 * 2 * t ( 1 - t ) + P2 t2

조절점이 4 개인 경우,
B(t) = P0 * ( 1 - t )3 + P1 * 3 * t * ( 1 - t )2 + P2 * 3 * t2 * ( 1 - t ) + P3 * t3


references
http://www.moshplant.com/direct-or/bezier/
http://en.wikipedia.org/wiki/Bernstein_blending_function
http://cagd.cs.byu.edu/~557/
 

:


> ps ux | awk '/process_name/ && !/awk/ {print $2}'


* 이 방법은 완전히 신뢰할 수 있는 건 아니다. 왜냐하면,
같은 이름의 다른 프로세스가 존재할 가능성이 있고,
프로세스 실행 후 이름을 변경할 수 있기 때문이다.



원문 : http://www.faqs.org/faqs/unix-faq/faq/part3/section-10.html 
(How do I find the process ID of a program with a particular name ... ?)

C 언어로 하는 방법도 블라블라 써 있긴 하지만,
결국은 /proc 밑에 정보를 읽어서 문자열 처리 해야하는 듯 ...
(좀 귀찮은데 나중에 혹시 쓸 일 있으면 해 보겠지... 일단 생략)

아흑 ㅜㅜ
---

결국 만들었다. C/C++ 버전 (2012년 10월)

http://baboc.tistory.com/232

:



어찌저찌 하다보니 또 svn 의 좋은 기능 하나를 알게 되었는데 ...
(사실은 회사에서 이미 어떤 분께서 새로 사용하던 기능)

svn:externals 을 편집하여 체크아웃이나 업데이트 받을 때 외부 모듈을 함께 받는 것이다.
예를 들면,
svn 저장소에서 SomeProject 이라는 프로젝트를 받는데, 이 프로젝트는 항상
SomeLib 라는 라이브러리도 함께 필요하다면, SomeProject 를 받기만 하면 SomeLib 도 받아지면 편할 것이다.
이럴 때 사용하는 것이 바로 지금 설명하려고 하는 것이다.
분명히 있을 법한 기능인데 이제 알았다 @.@

방법은 다음과 같다.
소스를 체크아웃 받은 자리에서 다음과 같이 명령을 내린다.

svn propedit svn:externals .                                

편집기가 열리는데 다음과 같은 형식으로 쓰면 된다. 여러 줄 편집 가능 !

<폴더>              <저장경로>

Lib/SomeLib      http://someAddress/svnroot/SomeLib/trunk    

또는
<폴더>           -r      <rivision number>       <저장경로>

Lib/SomeLib    -r           12345                 http://someAddress/svnroot/SomeLib/trunk   



저장된 내용을 보려면 다음과 같이
svn propget svn:externals                                  



윈도우즈 환경에서 거북이로 하면 단방에 됩니다.
오른쪽 클릭하여 Properties 항목을 선택하면 됨.
(그림 오려 붙이기 귀찮아서 생략하려고 했는데, 그래도 완성도를 위해-_-; 붙여준다.)


사용자 삽입 이미지



































윈도즈용은 완전 쉬움 ...
:
원문 : http://kr.blog.yahoo.com/his636/1305370


MDI 프로그램을 만들면 항상 child window 가 뜬 채로 시작하는데,
파일을 open 하였을 경우에만 창이 나타나도록 하고 싶다.

이를 제어하기 위해서는

BOOL CXXXApp::InitInstance()

함수에서 다음 부분을 수정하면 된다.
 
CCommandLineInfo cmdInfo;
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; // 이부분 추가
ParseCommandLine(cmdInfo);


이해를 돕기 위해 CCommandLineInfo 클래스의 정의를 보면 다음 부분을 볼 수 있다.

enum { FileNew, FileOpen, FilePrint, FilePrintTo, FileDDE, AppRegister,
  AppUnregister, FileNothing = -1 } m_nShellCommand;

m_nShellCommand 변수에 기본적으로 할당된 값은 FileNew 이다.

사용자 삽입 이미지


















이 값을 자신이 원하는 값으로 변경하여 주면 된다.
:
사용자 삽입 이미지














똑똑하고 100배 일 잘하는 개발자 모시기
조엘 스폴스키 저/이석중 역 | 위키북스 | 2007년 09월

원제 : Smart and Gets Things Done : Joel Spolsky's Concise Guide to Finding the Best Technical Talent


조엘 스폴스키라는 이름 값과 친구의 블로그 서평을 보고 이 책을 사게 되었다.
작년 가을 쯤, 특강을 앞두고 있었기 때문에 적절한 이야기 거리가 될 거란 기대도 함께 있었다.

책 겉면에는 "조엘 온 소프트웨어 시즌 2"라고 써 있는데,
사실 원래 "조엘 온 소프트웨어" 책과는 성격이 다른 듯 하다.
(만약 그 정도의 깊이를 기대 했다가는 실망하는 사람도 있을 것 같으니 참고 하시길.)
게다가 그 책과 출판사도 다르고, 약간(혹은 많이) 상업적인 문구이기도 한데,
그래도 양심은 있는 지, 글자는 좀 작게 썼다.
아무튼 이것 때문에 일부 까대는 사람도 있긴 한데, 나는 그다지 관심 없다.

이 책의 주제는 "좋은 인재를 뽑는 방법"이지만
한편으로는 "사람들이 일하고 싶은 일터"이기도 하다.

특히 개발자들이 진정으로 원하는 사소한 것들에 대해서 이야기 하는데
개발자를 고용하는 사람 입장에서는 모르고 있을 가능성이 큰 것들도 꽤나 있다.
조엘식 인재 모시기는 다소 파격적이기도 해서
우리나라의 열악한 소프트웨어 환경에서는 함부로 따라하기 힘든 면이 많다.
하지만 그만큼 개념을 달리 하지 않으면 실재로 훌륭한 인재를 구하기도 힘든 현실이다.

개발자에게 독방을 주거나 최고급 책상, 의자, 모니터 등을 제공하기는 힘들겠지만
빵빵한 pc 와 정품 소프트웨어는 최소한 지급해 주어야 한다는 것에는 깊이 동의한다.
나도 입사 후 무려 2년 동안 부팅이 10~20 분이나 걸리고
틈틈히 급사망하는 pc를 사용했는데, 그 짜증은 이루 말 할 수 없는 것이었다.

작업이 더뎌질 뿐만 아니라 데이터를 날리기도 하고,
부팅이나 다른 프로그램이 실행되는데 기다리는 시간은 온갖 스트레스를 불러온다.
새 pc를 제공하는 데 불과 몇 십만원이면 되지만 그 동안 시간을 지체하면서 손해 본 것은
내 일당의 십수배 이상은 되지 않았을까 싶다.
당연히 손익을 따지면 어마어마한 손해이다.


내가 있는 회사는 엔지니어를 뽑는데 눈높기로 소문난 회사이기도 하다.
내가 봐도 딱 그런 느낌이 든다.
하긴 사람을 뽑는데 신중한 것은 어떤 면에서는 장점이다.
대졸 신입 사원을 잘 뽑지 않는데 거기엔 그럴만한 이유가 있다.
대졸 신입은 딱히 실력을 입증할 만한 데이터가 없다.
만약 학교를 다니면서 오랫동안 파트타임 잡을 가졌다거나 ACM 대회 같은 데서 입상한다거나
소프트웨어 대회에 출품하여 입상한 경험등이 있으면 좋겠지만
사실 그런 인재는 드물 뿐만 아니라 우리 회사에 지원하지도 않는다 -_-;
실재로는 어떨 지 모르지만 고용자의 입장에서는 대게 고만고만해 보이는 것도 사실일 터
그래서 모두 비슷비슷해 보이는 지원자들 가운데, 우열을 가릴 수도 없고
딱히 뽑을 사람도, 떨어트릴 사람도 없는 상황이 되어버린다.
결론은 다 뽑을 순 없으니, 다 떨어트린다...

훌륭한 사람을 뽑는 것 보다 엉뚱한 인재를 뽑지 않는 것이 더 중요하다는 것에
매우 충실한 인재 채용 정책이다.
조엘도 이 점에 대해서는 매우 중요하게 언급하고 있다.
그나마 규모가 있는 회사엔 어쩌다 괜찮은 인재가 지원하겠지만
20~30명 이하 크기 회사라면 아마도 처음부터 뛰어난 개발자를 신입으로 뽑는 건 정말 불가능 하다.
어쨌든 그래서 발전은 더뎌지고 악순환은 반복된다.
결국 고리를 끊는 것은 개념을 달리하는 인재 채용 정책이 될 지도 모른다.

어쩌면 사람을 뽑는 입장에서도 과감히 지르는 쪽이 오히려 남는 장사가 될 지 모르긴 하다만,
말이 쉽지 그만한 깡을 가진 사람은 드물 것이다.
어쨌든 이건 대단히 어려운 문제이다.


책의 마지막 부분에는 효과적인 면접 방법에 대해 얘기 하고 있는데,
그 가운데 가장 공감하는 것은 코딩 테스트이다.
간단히 재귀(recurse)나 포인터에 관한 문제를 풀게 하는 것은 매우 효과적일 거란 생각이 든다.

몇 년 전 아는 사람이 있는 곳에서 학부 병역특례원을 뽑으면서 면접 때,
linked list 와 stack 등을 시험 답안지에 손으로 직접 써서 구현하라는 문제를 냈는데,
나에게 채점을 해 달라고 해서 좀 당황한 적이 있었다.
내 개인적인 생각으론 이 정도는 좀 과한 것이 아닌가 생각되는데
그래도 규모가 작은 곳에서 병역특례로 인재를 구하는 것은 매우매우매우 중요한 기회이기 때문에
한편으로는 그러려니 하는 생각도 들었다.

내 생각엔 대졸 신입 정도의 수준이라면
아주 간단한 재귀 문제를 내는 것 만으로도 충분히 테스트를 할 수 있을 것 같다.
조엘이 말 하길, 사람의 실력에 따라 문제를 풀어 내는 속도가 천차 만별이라 하였는데
문제 자체의 난이도 뿐만 아니라 문제를 해결하는 속도나
문제를 풀어가는 과정을 봄으로써 그 사람의 실력을 충분히 가늠해 볼 수 있다고 본다.

만약 나에게 테스트 해 볼 수 있는 기회를 준다면
패턴 매칭이나 재귀 함수 호출을 써서 풀 수 있는 간단한 수학문제를 내 보겠다.
우리 회사에서도 전에 사람을 뽑으면서 factorial 따위의 문제들을 냈다고 했는데 괜찮은 시도라고 본다.

...


:
FreeType 을 이용한 TrueType Font 파일 읽기

FreeType 다운로드
참조 : http://freetype.sourceforge.net/index2

혹시 파일을 받으려고 헤메다가 못 받으신 분은 ... -_-;;
여기서 받으세요. (FreeType 2.3.5)
http://sourceforge.net/project/showfiles.php?group_id=3157 


여기서는 비주얼 스튜디오 6.0 을 기준으로 만든 예제입니다.
물론 다른 버전을 사용하더라도 별 차이는 없습니다. : )
원본을 보시려면 다음을 참조하세요.
http://freetype.sourceforge.net/freetype2/docs/tutorial/step1.html




우선 freetype 라이브러리를 다운 받고 적당한 곳에 압축을 풀고, VS 실행.
라이브러리 세팅.

사용자 삽입 이미지






















[Tools] > [Options ...] 를 선택하면 다음과 같은 다이얼로그가 뜬다. 여기서 세팅

사용자 삽입 이미지

























[Directories] 탭을 선택하고 "Show directories for:" 항목에서 "Include files" 를 선택한 후
아까 압축을 풀었던 freetype 라이브러리의 경로를 추가한다. (include 디렉토리를 서택하면됨)
... freetype-2.3.5\include

마찬가지로
"Show directories for:" 항목에서 "Library files" 를 선택하고 objs 폴더 경로를 추가한다.
... freetype-2.3.5\objs


[Project] > [Settings ...] 를 선택하고

사용자 삽입 이미지














다음과 같이 ... freetype-2.3.5\objs 폴더에 있는 lib 파일의 이름을 추가한다.

사용자 삽입 이미지




드디어 세팅 끝 -_-;;


소스 파일에 다음과 같이 FreeType 헤더를 추가한다.

#include <ft2build.h>
#include FT_FREETYPE_H

폰트를 로딩하는 함수는 다음과 같이 .
// fontFilePath : TTF file path.
// code : unicode of character which is loaded
bool LoadFont(const char* fontFilePath, int32 code)

    FT_Library  library;   /* handle to library     */
    FT_Face     face;      /* handle to face object */

    if ( FT_Init_FreeType( &library ) ) {
        return false;
    }

    if( FT_New_Face( library, fontFilePath, 0, &face) ) {
        return false;
    }

    if( FT_Set_Pixel_Sizes( face, BITMAP_WIDTH, BITMAP_HEIGHT) ) { 
        return false;
    }

    if( FT_Load_Char( face, code, FT_LOAD_RENDER ) ) {
        return false;
    }
}

위와 같이 TrueType Font 파일의 경로와 로딩하려는 문자의 유니코드를 파라미터로 받아
함수를 실행하면 다음과 같이 face 에 데이터가 로딩된다.
(다음 예제는 굴림 폰트의 'a' 를 읽은 결과이다)

사용자 삽입 이미지









































읽은 글자에 대한 베지어 커브 컨트롤 포인트 리스트는 다음을 보면 된다.
face->glyph->outline

여기는 컨투어 개수와 컨트롤 포인트 리스트가 있다.
글자의 외곽선 정보 뿐만 아니라 비트맵 이미지도 읽을 수 있다.

face->glyph->bitmap

각 데이터 형에 관한 자세한 내용은 FreeType 페이지를 참조하라.



베지어 커브를 그릴 수 있는 적절함 함수를 추가하여서 그림을 그려보면 대략 다음과 같이
예쁜 그림을 얻을 수 있다. 이건 직접 해 보셈 -_-;

사용자 삽입 이미지

: