May 31 2007

엔지니어 발을 묶겠다는 어이없는 칼럼에 대한 생각

분류: Dev.Think 태그: ,, Heart @ 10:04 오전

Trackback : http://dev.heartsavior.net/archives/98/trackback/

@ [염주영 칼럼] 핵심 엔지니어 국가가 관리해야

요즘 이 분때문에 이공계 종사자 분들의 분노가 하늘을 찌를 듯 합니다. 기사의 댓글만 봐도 알 수 있죠.

칼럼 내용에 대한 반박은 류한석님이 포스팅하신 아랫 글로 대체하겠습니다.
사실 길게 쓸 가치가 없어보이거든요.

@ 엔지니어의 외국기업 이직을 금지해야 한다는 주장을 읽고

한 마디로 말하자면, 엔지니어들을 힘으로 찍어누르려는 말도 안되는 사고방식이라고 봅니다.

문제의 본질은, 기술 연구에 대한 가치를 제대로 평가하고 그 가치에 걸맞는 인센티브를 엔지니어들에게 분배하느냐 아닌가요? 문제의 본질도 파악 못하고 당장의 현상만 생각하니 ‘그럼 국가 레벨에서 발을 묶자’ 라는 말도 안되는 주장이 나오는 것이겠죠.

사실 전 칼럼이 쓰여진 날 바로 가서 보고, 리플로 응수했습니다.
근데 왜 포스팅까지 하면서 열을 올리고 있냐면, 엄청난 반발을 사고 있는데도 불구하고 칼럼을 내리거나 사과문, 혹은 반박문이 올라오지 않기 때문입니다.

칼럼이란게 그냥 피드백 없이 내지르면 끝인가요?
불특정 다수에게 영향력이 행사되는 신문이라는 매체가 귀를 닫고 입으로만 떠들어댄다면 매체에 의해 직간접적으로 피해를 입는 개인 혹은 기업은 뭐가 되는건가요?

아무튼, 이런 말도 안되는 사고방식을 가지고 계신 분이 펜대를 잡고 있으니… 이공계의 대거 국외 이탈이 가속화되는 것은 불 보듯 뻔하겠군요.

대단한 영향력이십니다!! 이공계를 최악의 위기로 몰아넣는 영향력을 가지고 계세요! 축하드립니다!


May 31 2007

기간 추정…

분류: Dev.Think 태그: ,, Heart @ 1:42 오전

Trackback : http://dev.heartsavior.net/archives/99/trackback/

상사에게 일을 받으면 상사분은 ‘언제까지 할 수 있어?’ 부터 물어본다.

단순 작업이라면 기간이 얼마나 걸릴 지 어렵지 않게 이야기 할 수 있을 것이다.
그만큼 많이 해 왔을 작업일 것이니…

그 추정의 기준이 되는 것은 보통은 ‘이전에 걸린 시간’이다.
환경 차이, 스케쥴 차이, 기타 차이 등을 고려하면서 이전에 걸린 시간을 기준으로 더하거나 빼는 것이다.

근데, 프로그래머로 살다 보면 기간 추정이 상당히 어려울 때가 많다.
예를 들어, 기존에 한 번도 못해본 것이라던지, 설계단계부터 새로 시작하는 경우라던지, 해야 할 일이 방대해서 기간 추정을 길게 해야 할 때이다.

어렵다고 안할 수도 없는 노릇이고… 너무 짧게 잡으면 스스로 무덤을 파는 것이고, 너무 길게 잡으면 긴장이 풀려서 일하기가 어려울 뿐더러, 상사에게 좋게는 핀잔, 나쁘게는 잔소리를 들어야 한다.

Software Estimation 이라는 책이 있긴 한데, 얼마나 도움이 될까는 미지수이고…
(보신 분께서는 소중한 리뷰 부탁드립니다.)

필요한 것은 시간일까?(경험을 더 쌓는다는 의미로…)
아니면 문제를 분석하고 쪼개고 단순화시켜 단순 작업처럼 추정 가능한 정도로 만들 수 있는 능력일까?
아님, 후자를 가능하게 하는 것이 전자일까?

어떻게 하면 더 효율적이고, 더 정확하게 추정할 수 있을까?


May 29 2007

[C/C++]DLL 외부에서 DLL 내부의 가변 크기 데이터를 가져오는 방법

분류: Lang.C_CPP 태그: ,, Heart @ 9:28 오후

Trackback : http://dev.heartsavior.net/archives/100/trackback/

DLL에서 데이터를 가져와야 하는데, 데이터가 가변적(크기가 일정하지 않음)일 경우가 있습니다.

이를 처리하는 방법은 여러 가지가 있는데, 크게 ‘DLL 외부에서 할당하고 DLL 내부에서 이를 사용하는 방법’ 과 ‘DLL 내부에서 할당하고 DLL 외부에서 이를 사용하는 방법’ 으로 나눌 수 있습니다.

전자의 경우 DLL 외부에서 충분한 사이즈의 메모리를 확보하려면 DLL 내부에 메모리를 얼마나 할당해야 하는지 요청해야 하는 번거로움이 생깁니다.(물론, 최대치를 정해버릴 수 있겠지만 가장 나쁜 방법이죠. 고정이 되어 버리기 때문에…)

후자의 경우 DLL 내부에서 사이즈의 메모리를 확보하고 DLL 외부에 메모리를 그대로 보내 주면 되기 때문에 자료를 한 번에 요청할 수 있고, DB 액세스가 필요한 경우 쿼리를 여러 번 실행할 필요가 없기 때문에 더욱 효율적일 수 있습니다.

이 때, 우리가 생각해야 하는 것 중 하나가 메모리 해제인데, DLL 내부에서 메모리를 할당하고 DLL 외부에서 이를 받아서 사용할 경우, 사용은 가능하지만 해제하게 되면 에러가 발생합니다.

이를 해결하기 위해 DLL 외부에서 DLL 내부에 메모리 해제를 요청할 수 있도록 합니다. 메모리 해제를 알려 주고 받아온 메모리 주소를 보내면 DLL 내부에서 메모리를 해제하면 됩니다.

아래는 DLL 내부의 코드와 DLL 외부의 코드입니다.

DLL 내부의 코드

// TESTDLL_API는 __declspec(dllexport)를 표현하는 define 이다.

TESTDLL_API void testMem(char ** ppData, int * nDataCount);

TESTDLL_API void testMem(char ** ppData, int * nDataCount)
{
// 사이즈를 저장할 수 있는 공간을 NULL로 할당할 때, *ppData 를 메모리 해제
if( !nDataCount )
{
delete [] *ppData;
return;
}

*ppData = new char[10];

for( int i = 0 ; i < 10 ; i++ )
{
*( *(ppData) + i) = i + ‘A’;
}

*nDataCount = 10;
}

DLL 외부의 코드

char * pData;
int nCount;

testMem(&pData, &nCount);

for( int i = 0 ; i < nCount ; i++ )
{
printf(”– %c\n”, *(pData + i));
}

testMem(&pData, NULL);

위의 두 코드에서 pData, ppData에 대해 메모리 구조(특히 포인터가 가리키는 것)를 직접 그려서 유심히 살펴보기 바랍니다.
메모리 구조만 그려볼 수 있게 되면 100% 이해하게 되는 것입니다.


뒷 쪽 »