Programmer Application Note

2015년 11월 18일 수요일

2015년 11월 17일 화요일

c++ string replace all

오전 12:26 Posted by PAN.SPOT , No comments
#include <iostream> #include <algorithm> #include <string> using namespace std; int main() {    cout << "Hello World" << endl;    string str = "ab0cd0e0fg";    replace_if(str.begin(),str.end(),bind2nd(equal_to<char>(),char('0')),char('-'));    cout << str << endl;    return 0; } output:    ...

2015년 10월 18일 일요일

jenkins 설치 및 gitlab 연결 하기

오후 6:40 Posted by PAN.SPOT , , No comments
1. Jenkins  jenkins는 오픈소스 지속적통합 CI(continuouus intergration) tool 2. Install jenkins Debian packages  This is the Debian package repository of Jenkins to automate installation and upgrade. To use this repository, first add the key to your system: wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - Then add the following entry in your /etc/apt/sources.list: deb...

2015년 10월 14일 수요일

리눅스에서 윈도우 폴더 공유 시 권한문제 및 컴파일 시 Value too large for defined data type 문제

오후 8:37 Posted by PAN.SPOT No comments
윈도우에서 공유 설정을 한 후 리눅스에서 mount 하여 사용 할 때 권한 문제가 발생 한다면, 리눅스 계정의 uid,gid 설정을 하면 해결 된다. 해당 윈도우 폴더에서 리눅스 프로젝트를 컴파일 하였을 때 아래와 같은 오류가 발생한다면 nounix,noserverino 추가 한다. Value too large for defined data type 정의한 자료형으로 쓰기엔 너무 큰 값 최종 마운트 방법 mount -t cifs //<Windows공유서버IP>/<윈도우공유폴더명> /<리눅스공유폴더명> -o username="<계정>",password="<암호>",uid=<xxx>,gid=<xxx>,nounix,noserve...

2015년 8월 26일 수요일

openvpn 설치

오후 7:06 Posted by PAN.SPOT , 1 comment
혼자 사용할때 설정이 간편한 openvpn-as 설치 방법 (ubuntu14.04 기준) server 측 설정 $sudo apt-get install openvpn-as $passwd openvpn //비밀번호 설정 (접속 비밀번호임) https://serverip:943/admin 여기로 접속하면 사용자 추가등 기본 설정을 할 수 있음. 단 사용자는 2명이상일 때 추가 결재를 해야 사용가능한것으로 보임.   client 측 설정 windows 사용자 기준 openvpn client 설치 https://openvpn.net/index.php/open-source/downloads.html https://serverip:943/ 여기로...

2015년 8월 9일 일요일

복사생성자와대입연산자 코딩 시 주의 할 점

오후 6:05 Posted by PAN.SPOT , No comments
디폴트 대입연산자를 사용하지 않고 직접 코딩 한다면 우측 연관 연산을 고려하여 자기자신의 참조자를 반환하도록 하자. 또한 자기 대입에 대한 처리도 하자. 우측연관 연산의 예 x = y = z = 15; 자기 대입에 대한 예 x = x; , a[i] = a[j]; class Widget{ Widget(const Widget& rhs); Widget& operator=(const Widget& rhs); } Widget& Widget::operator=(const Widget& rhs) { Widget temp (rhs); // 자기 대입에 대한 처리 swap(temp); // 자기 대입에 대한 처리 return *this;...

2015년 7월 27일 월요일

함수포인터

오후 5:04 Posted by PAN.SPOT , No comments
함수 정의 void cStyleFunction(int param){...} class Aclass { void classFunction(int param){...} static void classStaticFunction(int param){...} }; namespace NameSpace{ void namespaceFunction(int param){...} } 함수포인터 선언 void (*FunctionPointer) (int param); typedef void (*TypedefFunctionPointer) (int param); void (Aclass::*ClassFunctionPointer) (int param); 함수포인터 사용 void (*FunctionPointer)...

2015년 7월 23일 목요일

디폴트 생성자 , 소멸자, 복사 생성자 , 대입연산자

오후 5:22 Posted by PAN.SPOT , No comments
컴파일러가 자동으로 생성하는 것들 Empty() {...}; //기본 생성자 ~Empty() {...};//기본 소멸자 Empty(const Empty& rhs) {...}; //복사 생성자 Empty& operator=(const Empty& rhs) {...}; //복사 대입 연산자 Empty e1; //기본 생성자,기본 소멸자 Empty e2(e1); // 복사 생성자 e2 = e1; //복사 대입 연산자 만약 하나밖에 없는 자원이라 복사생성자나 대입 연산자가 필요 없다면 pirvate: HomeForSale(const HomeForSale&); HomeForSale& operator=(const HomeForSale&...

임베디드 webkit browser 한글 폰트 설정

오후 4:20 Posted by PAN.SPOT , No comments
임베디드에서 webkit browser 한글이 깨져 나올때가 있다. 이때 fonts.conf 파일을 찾아서  아래와 같이 변경 해준다.  파일을 열어보면 다음과 같이 match 태그들을 볼 수 있다. 기본 폰트인 monospace,sans-serif 등을 볼 수 있는데 아래와 같이 기본폰트를 강제로 한글 표현이 가능한 폰트로 변경 한다.  아래는 sans serif를 NanumGothic으로 변경한 예이다.  <match target="pattern">   <test qual="any" name="family">           <string>sans serif</string>  ...

2015년 7월 21일 화요일

git 계통관계

오후 11:46 Posted by PAN.SPOT , , No comments
^ : 해당 커밋의 부모 ^2 : 두번쨰 부모 (즉 부모가 두가지로 나눠져 있을 떄) ~: 해당 커밋의 부모 ~2 : 해당 커밋의 부모의 부모 HEAD^^ = HEAD~...

2015년 7월 1일 수요일

If no other git process is currently running, this probably means a git process crashed in this repository earlier. Make sure no other git process is running and remove the file manually to continue.

오후 10:55 Posted by PAN.SPOT , No comments
git 사용중 아래와 같은 에러발생 시  If no other git process is currently running, this probably means a git process crashed in this repository earlier. Make sure no other git process is running and remove the file manually to continue. $rm /PROJECTDIR/.git/index.lock $git reset ...

2015년 5월 5일 화요일

udev를 이용한 usb mount

오후 7:22 Posted by PAN.SPOT No comments
udev를 이용한 usb auto mount 임베디드 리눅스 시스템에서 usb를 auto mount/umount 할 수 있는 방법을 알아보자. 먼저 타켓 시스템에서 udevd daemon 동작 하고 있는지 확인 한다. $ps -ef | grep udevd 검색되는게 없다면 데몬이 돌지 않는 것이다. which udevd 또는 find / -name "udevd"로 설치되어 있는지 확인 한다. udevd daemon이 없다면, udev source 에서 다운받아서 타켓 시스템에 맞게 cross compile 후 타겟 시스템에 추가 한다. 각각의 타켓 시스템에 맞게 컴파일 한 후 rootfs에 복사하여 적용 한다. 이벤트가 발생...

predicate / function object / unary / binary

오후 5:38 Posted by PAN.SPOT , No comments
predicate / function object / unary / binary 용어정리 function object(함수객체 Functor) : 클래스에서 연산자 ()를 오버로딩 하여 해당 클래스의 인스턴스를 함수 형태로 호출할 수 있게 한 클래스 객체를 말한다. predicate (술어) : 적어도 하나 이상의 개체를 전달받아서 bool 값을 반환 하는 함수 객체 이다. unary : 단항 binary : 이항 STL 템플릿 예제로 확인 해보자. 예제 for_each std::for_each template <class InputIterator, class Function> Function for_each (InputIterator first, InputIterator...

2015년 5월 4일 월요일

메모리 계산 쉽게 하기

오전 1:28 Posted by PAN.SPOT No comments
메모리 계산 2^10 = 1kbyte 2^20 = 1Mbyte 2^30 = 1Gbyte 2^40 = 1Tbyte 주소번지로 메모리 용량 쉽게 계산하기 만약 0x0 번지 부터 마지막 주소가 0x7FF이 마지막 주소인 메모리가 있다면? 0번지 부터 메모리가 사용되므로 (0x7FF - 0x0) + 1 = 0x800 대부분의 메모리 용량은 2진수로 변환 했을 때 1인 값이 하나밖에 없는 경우가 많다. 0x800 -> b100 0000 0000 (2^11 = 2kbyte) ...

ubuntu 64bit OS 32bit 컴파일 하기

오전 12:09 Posted by PAN.SPOT , No comments
설치 $ sudo dpkg --add-architecture i386 && sudo apt-get update 삭제 $ sudo dpkg --remove-architecture i386 && sudo apt-get update 패키지 설치 $apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i38...

2015년 4월 22일 수요일

git 삭제된 파일만 되돌리기

오후 4:59 Posted by PAN.SPOT , , No comments
svn을 쓰다가 git으로 넘어온 사람들을 보면 간혹 svn update와 같이 동작 하는것을 원하는 사람들이 있다. 삭제된 파일만 되돌리기를 하고 싶은경우 이다. 즉 여러개의 파일이 있을 때 수정된 파일을 제외 하고 삭제된 파일만 다시 reset 하고 싶을경우 이다. 먼저 UNDO 하는 방법을 알아보자. 1.모든 파일을 되돌릴 때 $git reset --hard HEAD 2.특정 파일만 되돌릴때 $git checkout -- file 2번을 이용하면 특정파일만 되돌릴 수 있으나 파일을 일일이 기입하는 것은 여간 귀찮은일이 아니다. 그래서 돌리고 싶은 파일만 삭제한 후 아래와 같이 입력한다. $git ls-files -d | xargs git checkout -- 파이프와 xargs를 이용한 방법으로 명령어를...

2015년 4월 21일 화요일

Gitlab error “fatal: The remote end hung up unexpectedly”

오후 7:00 Posted by PAN.SPOT , No comments
최초 데이터를 push 할 때 "fatal: The remote end hung up unexpectedly"가 난다면? 1.chunked boad size가 작아서 error 나는지 log를 확인 한다. $ su - $ vi /var/opt/gitlab/nginx/logs/gitlab_error.log [error] 23946#0: *885 client intended to send too large chunked body: 524304336 bytes, client: xxxx, server: xxxx 2.gitlab의 nginx max body size를 변경한다. $ vi /etc/gitlab/gitlab.rb nginx['client_max_body_size'] = 'XXXm' // XXXmbyte $...

git ignore 파일 쉽게 만들기

오후 5:45 Posted by PAN.SPOT , , No comments
리눅스 프로젝트를 하게 되면 make시에 각종 object 파일들이 생성되거나 변경 된다. 이 때 git에 적용하지 않을려면 .gitignore 파일에 무시할 폴더나 파일을 기록 하면 되는데 폴더가 많으면 쉽지 않다. 그렇때 아래의 커맨드를 이용해보자. 1. 최초 프로젝트를 make clean 한다. $make clean  2. 프로젝트를 git server에 push $git add -A $git push 3. 프로젝트를 컴파일 한다. $make 4. git status를 하면 make시에 생성되는 파일들이 나온다. 5. make 후 생성된 모든 파일들을 .gitignore에 저장한다. $git status --porcelain | grep '^??' | cut -c4- >>.gitignore 위의...

2015년 4월 14일 화요일

/dev/null 과 2 > &1

오전 12:11 Posted by PAN.SPOT No comments
아래의 명령어에서 사용된 것을 하나씩 확인 해보자 backup.sh > /dev/null 2>&1 >(리다이렉션) : 표준 출력을 다음에 위치한 곳으로 우회 시킨다. /dev/null : 모두 버려라 &j : j가 참조하고 있는곳 0:표준 입력,1:표준출력,2:표준에러 예) $backup.sh > log.txt backup.sh의 표준 출력을 log.txt로 보낸다. $backup.sh 2> err.txt backup.sh의 표준 에러를 err.txt로 보낸다. 이제 $backup.sh > /dev/null 2>&1 분석해보자. backup.sh > /dev/null - backup.sh의 표준 출력을 버려라. 2>&1 -...

2015년 4월 13일 월요일

주기적인 작업 crontab

오후 11:53 Posted by PAN.SPOT No comments
crontab 설정된 시간에 따라 그 시간에 맞는 서비스를 실행 시키는 것 일반적으로 주기적으로 백업이 필요할 때 사용한다. 예약된 리스트 $crontab -l 작업 수정 및 등록 $crontab -e 작업 삭제 $crontab -r 아래의 폴더에 실행파일을 넣으면 끝 /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly 정밀하게 설정하기 $su - (root 권한) $crontab -e 분(0-59) 시(0-23) 일(0-31) 월(1-12) 요일(0,7:일요일,1:월요일,.....) 명령어 예) */10 1-4 1,3 5 * backup.sh > /dev/null 2>&1 */10 : 매 10분 간격으로 1-4...

gitlab backup

오후 11:17 Posted by PAN.SPOT , No comments
#gitlab backup $sudo gitlab-rake gitlab:backup:create $sudo ls /var/opt/gitlab/backups #backup 위치 변경 $sudo vi /etc/gitlab/gitlab.rb gitlab_rails['backup_path'] = '변경될 위치' $sudo gitlab-ctl reconfigure # limit backup lifetime to 7 days - 604800 seconds $sudo vi /etc/gitlab/gitlab.rb gitlab_rails['backup_keep_time'] = 604800 $sudo gitlab-ctl reconfigure # restoring backup $sudo cp 1393513186_gitlab_backup.tar...

gitlab git-data 위치 변경

오후 11:11 Posted by PAN.SPOT , No comments
git-data의 위치를 A서버에서 B서버로 변경 하려면?? A 서버 = gitlab server B 서버 = data server (gitlab이 설치되어 있지않은 data server) 1. A서버의 git 계정의 uid와gid 정보를 가져옴.(uid:999,gid:999) 2. B서버에 git 계정을 추가 $sudo adduser --uid 999 git (A서버와 uid,gid를 일치 시킴 일치 시키지 않으면 permission denied 에러에 빠져 헤어나오지 못함.) 3. B서버(data가 저장될) 설정 $sudo mkdir git-data $sudo chown git:git git-data/ 4. B서버 삼바설정 $$sudo gitlab-ctl stop $sudo system-config-samba...

2015년 4월 12일 일요일

gitlab 서버 구축

오후 5:52 Posted by PAN.SPOT , No comments
ubuntu 14.04 버전 (64bit) 1. Install and configure the necessary dependencies $sudo apt-get install openssh-server $sudo apt-get install postfix 2. Download the Omnibus package and install everything $wget https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab_7.9.2-omnibus-1_amd64.deb $sudo dpkg -i gitlab_7.9.2-omnibus-1_amd64.deb 3. Configure and start GitLab $sudo gitlab-ctl reconfigure 4....

2015년 4월 9일 목요일

C++ 표준

오후 4:52 Posted by PAN.SPOT , No comments
연도 C++ 표준 비공식 이름 2011년 ISO/IEC 14882:2011 C++11 (c++0x) 2007년 ISO/IEC TR 19768:2007 C++TR1 2003년 ISO/IEC 14882:2003 C++03 1998년 ISO/IEC 14882:1998 C++98...

trac 서버 구축

오전 2:38 Posted by PAN.SPOT , No comments
ubuntu 14.04 기준 1.패키지 설치 $sudo apt-get install apache2 $sudo apt-get install apache2-utils $sudo apt-get install trac libapache2-mod-python python-setuptools $sudo apt-get install rcconf 2.apache authorization 파일 생성 최초 생성 시 $sudo htpasswd -c /etc/apache2/authorization.auth 사용자명 사용자 추가 시 $sudo htpasswd  /etc/apache2/authorization.auth 사용자명 3. apache2 trac 설정 $sudo vi /etc/apache2/mods-enable/svntrac.conf <Location...

svn 서버 구축

오전 2:38 Posted by PAN.SPOT , No comments
ubuntu 14.04 기준 1.패키지 설치 $sudo apt-get install apache2 $sudo apt-get install apache2-utils $sudo apt-get install subversion libapache2-svn $sudo apt-get install rcconf 2.apache authorization 파일 생성 최초 생성 시 $sudo htpasswd -c /etc/apache2/authorization.auth 사용자명 사용자 추가 시 $sudo htpasswd  /etc/apache2/authorization.auth 사용자명 3. apache2 svn 설정 $sudo vi /etc/apache2/mods-enable/svntrac.conf <Location...

svn merge

오전 12:34 Posted by PAN.SPOT , No comments
● svn merge -r 옵션과 -c 옵션 svn merge -c 130 == svn merge -r 129:130 svn merge -c -130 == svn merge -r 130:129 ● merge branches -> trunk          ▶ branches에서 수정된 30~34번까지의 내용을 trunk에 적용하려면? $svn switch trunk URL : 작업사본을 trunk로 변경 (이미 trunk라면 생략) $svn merge...

2015년 4월 7일 화요일

linux 쉘 명령어 모음

오후 8:26 Posted by PAN.SPOT No comments
$ll : ls -l $Pushd : 현재디렉토리저장 $Popd : 저장한 디렉토리로 이동$Dirs : 저장된 디렉토리 표시 $chgrp 그룹명 파일또는폴더 :  그룹 변경 $df : 마운트된 파일 시스템의 사용 가능한 공간 확인 $du : 디렉토리의 파일용량 $free : 현재 메모리 사용량 및 사용가능한 메모리 $w : 현재 로그인한 사용자가 무엇을 하는지 알려줌  $tty : 시스템에서 연결되어 사용하는 터미널 ...

svn url 변경

오후 7:07 Posted by PAN.SPOT , No comments
서버 저장소 주소 변경 $svn relocate branches <-> trunk 간 주소 변경 $svn switch    - switch는 하나의 로컬작업 저장소에서  branches로 일시 전환 했다가 trunk로 전환 할때 사용 ...

svn 충돌 해결법

오후 6:54 Posted by PAN.SPOT , No comments
(e) edit - 병합된 파일을 편집기로 열기  (df) diff-full - 병합된 파일을 보기  (r) resolved - 병합된 파일을 채택하기  (dc) display-conflict - 모든 충돌 사항을 보이기(잘 병합된 부분 제외)  (mc) mine-conflict - 충돌 부분에 대하여 작업사본을 선택하기  (tc) theirs-conflict - 충돌 부분에 대하여 저장소본을 선택하기 (mf) mine-full - 충돌난 파일에 대하여 작업사본 파일을 선택하기 (tf) theirs-full - 충돌난 파일에 대하여 저장소본 파일을 선택하기 (p) postpone - 나중에 해결할 것으로 표시해두기 (l) launch - 외부...

apt-get

오후 6:37 Posted by PAN.SPOT , No comments
apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 패키지 관리 명령어 도구입니다. 패키지 인덱스 인덱스 정보를 업데이트 : apt-get은 인덱스를 가지고 있는데 이 인덱스는 /etc/apt/sources.list에 있습니다. 이곳에 저장된 저장소에서 사용할 패키지의 정보를 얻습니다. $sudo apt-get update 설치된 패키지 업그레이드 : 설치되어 있는 패키지를 모두 새버전으로 업그레이드 합니다. $sudo apt-get  upgrade 의존성검사하며 설치하기 $sudo apt-get dist-upgrade 패키지 설치 $sudo apt-get install 패키지이름 패키지 재설치 $apt-get...