본문 바로가기

프로그래밍

std::vector 정렬하기 - quick sort, merge sort std::vector를 정렬하기 위해서는 std::sort를 쓰면 되지만, 요즘 인터뷰관련해서 학부때 공부했던걸 복습하고 있던 참에, 그새 소팅을 까먹은걸 깨닫고 다시 공부해서 작성해 보았습니다.array가 아니라 vector 버전으로 짰습니다. array버전은 많지만 vector 버전은 별로 없는것 같아 학생분들이나 인터뷰보실분들이 필요할것 같아서 공유합니다. 물론 array나 vector나 마찬가지지이긴 하지만, vector쪽이 코드가 더 간결해집니다.<퀵 소트>template void quick_sort_recursive(std::vector& v, size_t left, size_t right) { size_t i = left, j = right; T pivot = v[..
GCC 4.1 호환 지원 GCC 4.4.6 로(정확히는 GCC4.1 보다 높은 버젼으로) 라이브러리를 빌드하면, GCC 4.1 이하 버젼에서 사용할 수가 없다. 다음과 유사한 링크 에러가 발생하기 때문이다./root/3rdPartyDependencies/lib/libcryptopp.a(gf2n.o): In function `operator<< >':/usr/lib/gcc/x86_64-redhat-linux6E/4.4.4/../../../../include/c++/4.4.4/ostream:458: undefined reference to `std::basic_ostream >& std::__ostream_insert
SVN trunk 변경사항 되돌리기 (SVN Rollback) 가끔 뻘짓을 하다보면 SVN trunk의 변동사항을 되돌려야만 할 때가 있다. 이럴 때 merging을 이용한 rollback으로 간단히 해결이 가능하다.Check out 해놓은 trunk 디렉터리로 이동하여 다음을 실행한다. 여기서 HEAD는 최신 revision을 의미하고, xxxx에는 rollback 하고자 하는 rivision number를 적는다. 당연히 trunk repository 주소는 본인의 것으로 변경하고 실행할것.svn updatesvn merge -rHEAD:xxxx svn+ssh://svn/myserver/trunk ./svn ci -m "Roll back to the revision xxxx"
SVN branch and merge 쉽게 활용하기 #2 이전에 잠깐 SVN에서 branch만들어서 사용하는 법과 merge하는 법을 적은 적이 있다. 뭔가 잘 안되어서 삽질하다가 적은건데, 좋은 방법은 아니었다. 그런데 우연히 블로그 유입경로를 보니 SVN/BRANCH/MERGE가 엄청 많다는걸 알고는, 가만 있을수가 없었다.사실 적어놓고 잊고 있었는데, 요새 branching을 많이 하다보니, 나름 정형화 된 방법이 있어서 새로 적을까 한다. branch를 생성하고 작업하고, merging 하기까지 일련의 과정을 나열해 보겠다. 잘 모르는 사람을 위해서 당연한것도 적도록 하겠다.1. branch 만들기branch를 만든다는것이 최신 trunk를 복사하는것이기 때문에, 기본적인 명령어 사용 순서는 이렇다.svn copy [TRUNK] [BRANCH PATH]..
Redhat/Ubuntu 리눅스에서 램디스크(RAM disk) 만들기 소프트웨어 개발을 하다 보면, 다양한 디스크 상태에 따른 예외처리를 구현해야 할 때가 많다. 일일이 열거하기는 어렵지만, 예를들면 디스크 용량 부족에 대한 예외 처리가 있을 수 있겠다. 하지만 이런 상황을 만들어내기 위해서 하드디스크에 파일을 채울 수도 없는 노릇이 아닌가. 이럴때 작은 아주 작은 크기로 램디스크를 만들면 쉽게 재현 할 수 있다.또 한가지는, profiling 등을 할 때, 디스크IO로 인한 부하 및 지연시간을 없애고 싶을 때가 있다. 이 때 파일 read/write를 램디스크로부터 하도록 함으로써 이를 해소 할 수도 있다. 램디스크는 비교할 수 없을만큼 access 시간이 짧기 때문에, 디스크 IO에 묻혀서 분간하기가 힘들었던 hot spot을 발견할 확률도 높일 수 있다.Redhat ..
Intel VTUNE 추가 기능 사용을 위한 EBS 설치 VTUNE를 설치하면 Hotspots, Concurrency 그리고 Locks and Waits를 기본으로 수행할 수 있다. 하지만 Lightweight Hotspots이나 Advanced Intel(R) Core(TM) 2 Processor Family - General exploration 아래의 좋은 기능들은 사용이 되지 않는 경우가 있다.이는 Hardware event-based sampling (EBS) 드라이버가 설치 되지 않았기 때문이므로 추가로 설치해 준다. 드라이버는 보통 VTUNE설치시에 설치가 되지만 Kernel 소스를 필요로 하기 때문에 만약 해당 시스템에 Kernel 소스가 없다면 스킵 되었을것이다.Cent OS 기준으로 EBS를 설치하는 절차를 설명하려고한다.1. Kernel d..
C++ 예찬 C++과 함께 한지 10년이 훌쩍 넘었다.처음 4년은 학부에서 시스템 프로그래밍, 자료구조, 알고리듬 등의 수업을 통해 C와 C++을 익혔고, 그후 2년동안은 회사에서 비디오 스트리밍 서버 개발. 그후 2년동안은 대학원에서 네트워크 시뮬레이터 개발. 그후 3.5년 동안은 병특할때 텔레콤 서버 개발. 그리고 지금 근 2년 동안 영국에서 방송 서버 개발.짧지 않은 기간을 해 왔지만, 워낙 머리가 나쁘고 게을러서 공부를 많이 하지 못했다. 그래서 아직도 깊이 들어가면 꼬랑지를 내리게 된다. 특히 실력있는 C++ 프로그래머와 코딩 스킬이나 디자인 패턴쪽으로 깊이 논쟁이 붙으면 도데체 당해낼 수가 없을때가 많다. 나는 스스로 생각한다. 프로그래머 자체로써의 나는 매우 부족하다.그럼에도 불구하고, 그동안 용케 남들..
Linux HTTP 프록시 설정 apt-get이나 yum으로 패키지를 설치할 때, HTTP 인터페이스를 이용해야 한다. 그런데 네트워크 환경에 따라서, 네트워크가 살아 있음에도 불구하고 HTTP 포트가 block 되어 있는 경우가 있다. 리눅스 내에서 직접 다운로드 하여 패키지를 설치해야 하는 경우에는 이럴때 매우 불편하다. 이럴경우 대부분 해당 네트워크에는 HTTP Proxy가 존재하는데, 이를 확인하여 리눅스상에서 설정해주면 문제가 간단히 해결 된다. 우선, 설정값을 확인한다. []# echo $http_proxy 만약 아무것도 설정되어 있지 않으면, 프록시 서버의 URI를 설정한다. []# export http_proxy='http://proxy:8080' 만일 인증이 필요한 경우에는 다음과 같이 설정한다. []# export h..