'What'에 해당되는 글 23건
- 2012.07.27
- 2012.07.26
- 2012.07.09
- 2011.12.02
- 2011.12.02
- 2011.10.31
- 2011.07.24
- 2011.07.15
- 2011.07.15
- 2011.07.15
이글은 HARD CODE라는 책에서 발췌한 내용입니다.
1. 뛰어난 개발자는 자신이 무엇을 하는지 안다.
뛰어난 개발자에게 "이 행이나 이 변수가 왜 여기 있습니까?"라고 물어보면 이유를 설명한다.
sylee) 자신이 만든 코드를 완전하게 이해하고 왜 그렇게 코딩했는지를 분명하게 설명할 수 있다.
2. 뛰어난 개발자는 마법을 믿지 않는다.
뛰어난 개발자는 블랙박스로 감춰진 API, 컴포넌트, 알고리즘을 불편해 한다. 잘못된 가정이나 허술한 추상화로 골탕을 먹지 않도록 사전에 코드가 돌아가는 방식을 파악한다.
sylee) 남이 만든 코드나 라이브러리를 사용하더라도 그것이 동작하는 방식을 이해하고 개발자의 의도를 파악하여 사용할때 발생할 수 있는 문제점을 충분히 고려해서 작업한다.
3. 뛰어난 개발자는 고객과 비즈니스를 이해한다.
뛰어난 개발자는 무엇이 중요한지 안다. 우선순위를 매겨서 적절한 타협점을 찾는다.
sylee) 아무리 열심히 개발하고 많이 하더라도 중요하지 않은 일만 골라서 하고 있다면, 그 개발자는 자신이 발휘할 수있는 능력의 10%도 인정받지 못할것이다. 스스로 판단하여 효율적인 업무 스케줄을 관리한다.
4. 뛰어난 개발자는 자신보다 고객과 팀을 우선한다.
뛰어난 개발자에게 사소한 업무란 없다. 사소한 고객도 없다. 모든 업무가 중요하고 모든 고객이 중요하다.
sylee) 고객이 잘 표현하지 못한다고 하더라도 문제를 제기하는것은 분명히 원인 있기 때문이라는 것을 충분히 이해하고 있으며, 그 근본 원인을 해결해 줄 방법을 찾아본다.
5. 뛰어난 개발자는 도덕과 윤리를 타협하지 않는다.
뛰어난 개발자는 업무를 달성하는 방법과 다른 사람을 대하는 태도를 중히 여긴다.
알고리즘을 선택하든 이메일을 작성한든, 자신에게 높은 기준을 적용하고 핵심 가치를 타협하지 않는다.
sylee) 자신의 코드에 높은 기준을 적용하여 , 조금 빠르고 쉽게하기 위해서 예외 상황 처리를 게을리하거나 전체 구조 설계를 대충 해서 나중에 근본적인 문제가 발생하지 않도록 한다.
6. 뛰어난 개발자는 우수한 대인기술과 의사 소통 기술을 보유한다.
인기있는 토크쇼 사회자가 될만한 개발자는 별로 없지만, 뛰어난 개발자는 다른 사람과 어울려 일하고, 주변 사람을 존중하며, 자신의 의사를 분명하고 적절하며 효과적으로 전달한다.
sylee) 개발자에게 가장 중요한 덕목이 소통과 공유의 기술이다. 아무리 능력이 뛰어난 개발자라도 다른 사람과 어울려 일할수 없고 자신이 표현하려는것을 제대로 적절하게 표현하고 협의할 수 없다면 그 능력을 제대로 발휘 할 수없을것이다.
7. 뛰어난 개발자는 폭넓고 협조적인 인맥을 보유한다.
뛰어난 개발자는 다른 사람의 능력을 알아본다. 그래서 위대한 사람은 서로에게 끌린다. 그들은 서로를 지지하는 인맥을 순식간에 구축해 개인으로 달성하기 어려운 효율를 발휘한다.
sylee) 자신을 도와줄수 있고 조언을 구할수있는 가능한 폭넓은 인맥을 보유한다.
http://ictlab.tistory.com/230
류종택씨의 블로그에 개발자를 분류하는 괜찮은 아이디의 글이 있군요
추상화 레벨과 개발능력 두가지 관점에서 개발자들을 분류하고 있습니다.
다만, GUI 디자이너를 위해서 예외로 [감각] 이라는 요소를 추가했습니다.
디자인은 감각이 중요할 수밖에 없죠.
한번 읽어보세요
개발자의 분류 - 추상화 래밸 편 http://ryujt.textcube.com/51
-----------------------------------------------
위 글을 보면서 잠시 생각해 보기도 했고
그 동안 나름대로 생각해 온 점도 있어서
개발자의 분류를 다음과 같은 요소로 나누어봤습니다.
1. 커뮤니케이션 능력 (COMMUCATION )
커뮤니케이션 능력은 다른 사람과의 소통 능력과 이해력, 배려 등을 생각해 볼 수 있습니다.
고객이 하는 말을 잘 이해하고 , 말과는 다른 진짜 원하는 것이 무엇인지 까지도 잘 파악 할 수있어야 합니다.
이런 능력이 높은 사람은 관리자나 시스템 설계, 영업 쪽에 유리하다고 볼 수 있으나
커뮤니케이션 능력은 어떤일을 하던지 큰 도움이됩니다.
2. 연구 능력 ( RESEACH )
연구 능력은 핵심 알고리즘을 만들어 내는 능력입니다. 기존에 없는 새로운 분야를 공부(연구)하고
문제 해결을 위한 다양한 시도와 시행착오를 빠르게!! 거치면서 새로운 기능을 최적의 코드로 문제없이 구현해 내어야 합니다.
이 능력이 뛰어난 사람은 개발 회사에서 핵심 코드, 라이브러리, 콤포넌트, 프레임워크 등을 개발 할 수있습니다.
다만 .. 아무리 뛰어난 사람이라도 소통 능력이 부족하면 기껏 만들어 놓은 것이 다른 개발자가 쓰기에 불편하고
실제로 현장에서 쓰기에는 기능이 맞지 않거나 융통성이 없는 것이 되 버릴 수 도 있기 때문에
다른 개발자들과의 커뮤니케이션 및 최종 어플리케이션에 대한 이해도 많이 필요합니다.
3. 응용 능력 ( APPLICATION )
개발 회사에서 가장 많이 필요한 사람들은 응용 능력이 뛰어난 개발자들입니다.
회사의 이익을 창출하는 대부분의 코드는 완전히 새로 개발하는 것이 아닌, 기존 소스를 응용해서 만들어 내기 때문입니다.
이미 만들어진 알고리즘이나 프레임워크를 이용해서 신속하게 고객을 만족시킬 수 있는 신뢰성 있는 제품을 구현하고 유지보수 할 수 있어야 합니다.
이 분야의 능력은 구현 능력 뿐 아니라 각종 문제 상황에 대한 유연한 대처 능력, 문제 분석 기술, 원인 파악 능력등도 중요합니다.
4. 리더십 ( LEADER SHIP )
리더십이라면 다른 사람을 이끌 수 있는 능력을 말하는 것인데
현업 개발자와는 크게 상관이 없을 수도 있지만
개발자로서 경력이 쌓이면 관리 분야을 할 것인지 순수 개발엔지니러로 남을지 결정을 해야 할 시기가 올겁니다.
게다가 우리나라에서는 경력이 쌓이면 하기 싫어도 팀장의 역할을 조금씩 해야 하기 때문에
어느 정도는 필요한 능력이라고 하겠습니다.
하지만 개발 능력은 엄청나게 뛰어난데 리더십이나 커뮤니케이션 능력이 부족한 사람이 있다면
회사에서는 그 사람의 뛰어난 능력을 충분히 발휘할 수 있도록 업무 분야을 조율해야 합니다.
만약, 그런 사람에게 개발외에 팀장이 해야 하는 일과 비슷한 일까지 동시에 시킨다면
이것은 회사로 보나 개인으로 보나 시간 , 능력의 낭비가 될 것입니다.
-------------------------------
상세 업무에 따른 필요한 스킬 레벨
개발팀장 : C=상 , R=하, A=상 , L=상
시스템 설계 : C=상 ,R=하, A=하, L=중
핵심 개발 : C=중, R=최상, A=상, L=하
일반 개발 : C=중, R=하, A=상, L=하
장비 제어 개발자 : C=상 , R=하 , A=상, L=하
일반 개발자들보다는 장비제어쪽 분야 개발자는 담당 엔지니어와의 의사 소통이 훨씬 중요한것 같습니다.
즉 커뮤니케이션 능력이 뛰어나야 요청 사항 분석 및 구현 기능의 범위를 조율하고 ,문제의 원인 분석등을 원활하게 할 수 있습니다.
자기의 고집만 내세우고 고객의 불편한 점을 이해하려고 하지 못한다면
계속 고객과의 업무진행이 매끄럽지 못하고, 원인 파악에도 시간이 걸리며, 문제 해결 잘 되지 않을것입니다.
물론 위의 모든 능력이 다 뛰어난 사람이 최고의 인재 겠지만..
그런 사람이라면 개발자로 오래 남아있지는 않을겁니다.
개발회사는 개발자들을 주어진 각각의 능력에 맞게 적재적소에 업무 포지션를 할당하고
부족한 능력을 보완 할 수 있도록 물심 양면으로 지원하는 것이 개발자 및 회사를 위해 최선의 선택이라고 생각합니다.
영상 VFW Capture Class
- 일반적인 영상 보드는 TV수신 카드이다. 제작 회사에서는 개발 API를 제공하지 않으므로 윈도우에서 영상 Capture를 위하여 속도는 느리지만 Video For Windows(VFW)를 이용한다. VFW를 이용하게 되면 다른 TV수신카드 뿐만아니라 VFW를 지원하는 전문 Image Grabber, USB카메라에 이르기까지 동영상 또는 정지화상을 Capture를 할수 있으므로 소스를 수정하지 않더라도 좋은 호환성을 지니게 된다.
- C++을 위한 Capture Class의 설계
LRESULT FAR PASCAL FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr);//캡쳐후에 호출되는 콜백함수
LPBYTE m_lpDib; //콜백 함수내에서 이미지 포인터를 넘겨받아 저장하는 포인터
unsigned long m_BufferLength; // 콜백 함수내에서 저장되는 버퍼의 길이를 저장하는 변수
class CVFWCapture
{
public:
CVFWCapture(); // 생성자
void Scale(BOOL onoff); // 스케일 조정 함수
BOOL Connect(HWND hWnd,int left=0,int top=0,int right=320,int bottom=240);
BOOL Disconnect();
void VideoSource(); //Source설정 대화창
void VideoFormat(); //Format설정 대화창
void VideoDisplay(); //Display설정 대화창
HWND m_CaptureWnd;//캡쳐된 윈도우의 핸들
int m_Connect; // 연결되었는경우 TRUE 연결되지 않은경우 FALSE
int m_ImgYsize; //영상의 X크기를 저장
int m_ImgXsize; //영상의 Y크기를 저장
~CVFWCapture(); //소멸자
};
- CVFWCapture의 사용순서
시작시 : Connect함수를 호출한다 이때 화면이 출력될 윈도우의 핸들과 윈도의 오프셋을 조정할 수 있는 인자를 넘겨준다. 호출후에 성공이면 TRUE, 실패면 FALSE를 넘겨주며 m_Connect에 그 값이 저장된다.
연결후 : VideoSource(),VideoFormat(),VideoDisplay,Scale() 함수를 호출하여 영상의 입력 속성 등을 바꿀 수 있다.
종료시 : Disconnect()함수를 호출 함으로서 연결을 닫는다. 물론 소멸자가 호출 될때 자동으로 Disconnect가 호출 된다.
- CallBack함수의 사용
영상에 캡쳐되어 메모리 버퍼에 저장되면 CallBack함수가 실행되게 된다. Callback함수는 CVFWCapture클래스 안에 들어 있지 않으며, 모든 영상처리를 가능하면 Callback함수 안에서 처리하는편이 안전하다. 만약 비디오 버퍼의 내용이 일반적인 타이머 안에서 처리하게 되면 처리도중 영상 캡쳐로 인해 내용이 바뀔 수 있으며 캡쳐된 영상을 다른 곳으로 한부 더 복사하는것도 시간낭비, 메모리 낭비가 되기 때문이다.
LRESULT FAR PASCAL FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
m_lpDib = lpVHdr->lpData;//프레임 이미지 저장
m_BufferLength = lpVHdr->dwBufferLength;//이미지 버퍼의 크기
//실제 영상처리 작업을 이곳에 넣는다.
return TRUE;
}
출처 : http://sigi1404.tistory.com/entry/VFW-%EC%BA%A1%EC%B3%90-%ED%81%B4%EB%9E%98%EC%8A%A4
http://occam.n4gate.com/occam.php/OccamsRazorMain
http://www.gpgstudy.com/forum/index.php
[게임 인공지능 관련]
- 게임 인공지능에 대하여 폭넓게 다루고 있는 영문 사이트
http://www.gpgstudy.com/gpgiki/AiLove
- 게임 인공지능 관련 블로그. 번역문서들이 많음
http://www.gamesync.com.ne.kr/gamedev.net/prog_ai.html
- GameDev.net 한글문서 프로젝트. 게임 인공지능 관련문서들의 번역이 진행중
http://gpgstudy.com/forum/viewforum.php?f=10
- Gpgstudy의 인공지능 관련 포럼. 여러 가지 게임 인공지능에 대한 토론들이 이루어짐
http://www-903.ibm.com/developerworks/kr/robocode/robocode.html
- IBM의 로보코드 관련 사이트
[일반 인공지능 관련]
- 국내 최대의 인공지능 관련 커뮤니티
- 인공지능에 대한 방대한 자료를 제공하는 사이트
[인공생명 관련]
http://myhome.naver.com/altoz/
- 인공생명에 대한 프로젝트를 진행하던 사이트. 지금은 활동 정지
http://chaos.inje.ac.kr/Alife/
- 인공생명 관련 주제들이 잘 정리되어 있는 조용현님의 사이트
- 플로킹의 창시자, 크레이그 레이놀즈의 사이트
- 몇 가지 파라미터를 사용하여 실제 생명체와 같은 움직임을 시뮬레이션하는 사이트
http://www.navgen.com/3d_boids/
- 플로킹을 3D로 시뮬레이션한 프로그램을 소개
- 플로킹을 사용하여 물고기떼를 구현한 DirectX 기반의 프로그램을 소개
http://www.codepuppies.com/~steve/aqua.html
- 플로킹을 사용하여 물고기떼를 구현한 자바 애플릿 프로그램
[게임제작 관련]
- 한국 게임 개발자 협회. 게임제작 관련한 국내 최대의 사이트
- 3D 게임 그래픽 프로그래밍 관련 문서들이 잘 정리되어 있는 사이트
- Game Programming Gems의 번역자인 류광님이 운영하시는 사이트. 번역된 좋은 문서들이 많음
- 게임관련 책 번역가로 유명하신 류광님의 홈페이지
- 김성완님이 운영하시는 사이트. 게임제작과 관련된 문서들이 잘 정리되 있음
- 게임 기획 및 디자인 관련 사이트.
- 게임 프로그래밍 관련 기술들의 공유와 포럼을 위한 사이트
[기타]
- 운영자의 개인 홈페이지(^_^;)
Windows API
http://msdn2.microsoft.com/en-us/library/aa383750.aspx
Windows Data Types
http://msdn2.microsoft.com/en-us/library/aa383751.aspx
MSDN 라이브러리
http://msdn2.microsoft.com/ko-kr/library/default.aspx
MFC Reference
http://msdn2.microsoft.com/ko-kr/library/d06h2x6e(VS.80).aspx
MFC Reference(한글)
OpenMP 에 대한 글을 검색 중에 아주 좋은 글 발견.
다음 서적도 좋다.
사실 이 외에는 읽은 서적이 없다...-_-
|
CString -> char*
CString str = _T("권오철");
char *buffer = new
char[str.GetLength()];
strcpy(buffer,CT2A(str));
buffer;
delete buffer;
String -> char*
char ch[100];
strcpy(ch,(LPSTR)(LPCTSTR)"나는 누구인가?");
CString -> BYTE
BYTE msgProxy.byData;
CString strText = _T("ㅇㅇㅇ");
memcpy(msgProxy.byData,T2CA(strText), nLen);
BYTE byBuffer[100];
CString strText = _T("DDD");
strcpy((LPSTR)byBuffer,T2CA(strText));
m_SocketManager.WriteComm(
byBuffer, nLen, INFINITE);
char * -> CString
CString str = (LPCTSTR)(LPSTR)char * // 이방법은 좋지 않다 .. 글씨가 깨진다
char getMessage[100] = "나는 천재인가";
CString
strMessage;
strMessage.Format(_T("%s"),CA2T(getMessage));
[출처] 유니코드에서 CString to char* 로 바꾸는 방법|작성자 오치리