Public 131

내가 해보고 싶은 분산 컴퓨팅

컴퓨터 하드웨어가 아무리 빨리 발전한다고 해도 사람의 욕심을 채우긴 영원히 힘들것이다. 15년전과 비교해서 컴퓨터가 눈부실 정도로 좋아졌지만 아직도 성능에 만족하는 사람은 그리 많지 않은것 같다. 나같이 데이터를 다루는 사람이라면 발전하는 컴퓨터 성능보다 몇 배로 늘어나는 데이터를 보며, 그저 무어의 법칙만을 믿고 기다리기에는 인생이 너무 짧다. 짧은 인생동안 해볼수 있는 방법중에 가장 먼저 생각해 볼수 있는 방법이 분산처리이다. 분산처리 방법에는 구글에서 GFS를 기반으로 MapReduce라는것도 있고 HDFS 기반의 Hadoop도 있다. 하지만 그런 툴들의 사용법 보다는 그 시스템 자체가 더 흥미롭다. 리눅스에는 SO(Shared Object)라는 파일이 존재한다. 윈도위의 DLL정도 되겠다. so ..

Public/tip & tech 2009.05.12

warning assignment makes pointer from integer without a cast

apr로 프로그램을 테스트 하던중 심심치 않게 보이는 경고 메세지다. "변수형이 말없이 바뀌었다" 대충 이런 메세지인데 이런 메세지가 발생한 원인을 살펴보니 다음과 같다. 함수 원형이 정의되지 않는 경우 컴파일러는 함수의 리턴값을 int로 가정한다. 그런데 실제 사용한 부분에서는 int가 아닌 타입으로 사용했을 경우 발생한다. 예를 들면 apr_strtok()라는 함수를 사용했는데 헤더파일에 apr_strings.h를 추가하지 않으면 이런 경고 메제시가 발생한다.

Public/tip & tech 2009.05.12

[코드정리]debuging 함수

일반적인 경우 디버깅 함수를 추가할 경우 조건부 컴파일을 이용해서 처리한다. 간단히 예를 보면 #ifdef DEBUG fprintf(stderr,'[%d:%d]\t%s\n",__FUNCTION__,__LINE__,msg ); #endif 그런데 이런식으로 하나의 값을 보기 위해 #ifdef부터 해서 3개줄로 표시를 해야한다. 본인 경험으로는 이런 코드가 많이 질수록 코드가 간결해 보이지 않았다. 보다 코드를 간결하게 처리하기 위해서 다음과 같은 방법을 소개한다. 우선 c파일 상당에 #ifdef DEBUG #define debug(x) x #else #define debug(x) #endif 위와 같이 선언을 하고 디버깅을 위해 변수값을 추가하는 부분에서는 debug( fprintf(stderr,'[%d:..

Public/tip & tech 2009.05.12

open vs fopen 속도 측정

보통의 경우 파일을 처리할때 open보다는 fopen을 사용한다. O_CREAT니 O_RDWR과 같은 옵션을 외우느니 그런 옵션이 내장되어 있어서 사용하기 편한 fopen을 사용한다. 습관의 차이일수도 있다.(보통은 open보다는 fopen을 먼저 접한다 ) 그런데 가끔은 open을 사용해야하는 경우도 있다. 파일을 빈번히 열고 닫을 경우 fopen보다는 open이 속도가 빠르기 때문이다. 정말로 그런지 테스트를 한번 해보았다. 첫번째 파일은 test_open.c로 open, close만 10,000,000번 한다. 두번째 파일은 test_fopen.c는 fopen, fclose만 10,000,000번 한다. 테스트는 test_open한번 실행하고 test_fopen실행하는 식으로 총 5번 시간을 측정했..

Public/tip & tech 2009.05.12

어려운 포인터....( use of cast expressions as lvalues is deprecated )

프로그램에서 특정 변수가 char형으로 사용했다가 특정 컴파일 조건에서는 unsigned short 형으로 동작을 한다. 그래서 이 변수가 사용되는 함수에서는 void *로 변수를 받아서 형변환을 해서 사용한다. 그런데 생각했던 것과 다른 값이 나오는 경우가 있었다. unsigned short 형으로 데이터가 동작할때 void 포인터로 받아서 포인터 값을 1만큼 증가시켜 다음 데이터 값을 가리키도록 해야 하는데 이것이 생각했던 것과는 다른게 동작을 한다. 쉽게 코드로 하면 ((unsigned short*)p)++; 이런식으로 하면 p가 +2( unsigned short 의 크기 )만큼 증가하기를 기대했는데 컴파일은 되는데 "use of cast expression!s as lvalues is deprec..

Public/tip & tech 2009.05.12

cast from pointer to integer of different size

32비트 머신에서는 warning 없이 잘 컴파일 되던 것이 64비트 머신으로 갔더니 cast from pointer to integer of different size 이런 메세지가 뜬다.. unsigned short int* 형을 unsigned int형으로 바꾸는 부분에서 발생한 warning인데 sizeof로 확인해보니 unsigned short int*가 64비트에서는 8byte 자료형이고, unsigned int는 4byte 자료형이라서 발생하는 문제였다. 그래서 unsigned int를 unsigned long int로 수정했더니 warning이 사라졌다.

Public/tip & tech 2009.05.12

64비트 머신에서

64 비트 머신에서 달라지는 변수의 크기 char : 1byte short : 2byte int : 4byte long int : 8byte ( 32 bit 머신에서는 4byte ) float : 4byte double : 8byte unsigned long : 8byte ( 32 bit 머신에서는 4byte ) 모든 포인터 : 8byte(2^64) ( 32 bit 머신에서는 모든 포인터 4byte(2^32) ) 32비트 머신일때와 64비트 머신일때 각각 컴파일 하기 위해 명시적으로 64비트 머신에서 컴파일 하기 : gcc -m64 -g -o test test.c 명시적으로 32비트 머신에서 컴파일 하기 : gcc -m32 -g -o test test.c

Public/tip & tech 2009.05.12

땀방울 스펙

무얼 하든 상 받을 정도로 열심히… 땀방울이 스펙(영어·학점 등 조건)을 눌렀다 "우리 학교에 영어 토익 점수는 700점대밖에 안 되는데도 은행을 비롯해 대기업 여러 곳에 동시 합격을 한 선배가 있습니다." 본지의 '대학생취업자문단'으로 활동하는 전북대 이동현(경영학과 4)씨의 제보를 받고 수소문을 했다. 소문의 주인공은 지난 2월부터 인천 고잔동의 기업은행 남동중앙지점에서 막 수습행원(5급) 생활을 시작한 김재영(27)씨였다. 김씨는 지방대(전북대 무역학과 03학번) 출신으로 입사지원서에 토익 점수 제출도 안 했지만 취업 한파가 무색하게도 대학 졸업도 하기 전에 기업은행을 포함, 삼성증권·LG파워콤 등 5개 대기업에 동시 합격했다. 합격한 5곳을 놓고 행복한 고민을 하다가 '인간적인 분위기'에 끌려 기..

Public/아이디어 2009.05.11

Detail 이 힘이다.

작은 차이가 명품을 만든다. 문제는 작은 차이를 만드는 것이 큰 차이를 만드는 것보다 힘들다는 점이다. 기업의 말단조직, 보이지 않는 부분을 바꿔야 하는 디테일 경영은 말처럼 쉽지 않다. 기업문화와 조직수준이 높아야 디테일을 완성할 수 있다. 글로벌 기업 중에서도 톱 기업에서만 그 사례를 찾을 수 있는 것도 이 때문이다. 하지만 디테일이 갖춰지면 강력한 무기가 된다. 이제 모든 휴대전화의 표준이 된 ‘통화(send)’버튼과 ‘종료(power)’버튼이 위에 있는 자판 배열은 사실 1998년부터 시작됐다. 그전에 모든 휴대전화는 이 두 버튼이 자판의 맨 아래 양쪽에 배치돼 있었다. 버튼 하나만 위로 올렸을 뿐인 이 사소한 변화는 휴대전화 사용자들의 숨은 욕구를 간파한 것이다. 그리고 그 변화를 만든 사람은 ..

Public/아이디어 2009.04.29