Programmer Application Note

2017년 8월 10일 목요일

2017년 8월 2일 수요일

합성곱 신경망(convolutional neural network)

오후 5:55 Posted by PAN.SPOT , , No comments
1. CNN 신경망이란
   - 합성곱계층 과 폴링계층이 추가된 신경망 구조를 가지며, 3차원 데이터 같이 입체적인 데이터가 흐른다.  이미지를 예로 들면 가로,세로,채널(색상)으로 구성된 3차원 데이터 인데 이전까지의 완전연결 계층에서는 3차원 데이터를 평평한 1차원 데이터로 바꾸어 입력 하였지만 CNN에서는 3차원 형상정보를 그대로 입력하여 3차원에 담겨있는 정보를 같이 비교 하게 된다. CNN에서는 입출력 데이터를 입력,출력 특징맵 (feature map)이라고 한다.



2. 합성곱(Convolutional)
   - 합성곱 연산은 입력데이터에 필터(커널)를 적용하는데 필터는 (높이,너비) 형태로 표현되며 아래와 같이 세로,가로 (4,4)의 입력 데이터가 입력 될 때 필터(3,3)의 합성곱은 (2,2) 가된다. 필터의 윈도우를 일정간격(stride) 만큼 이동 시켜  단일 곱셈-누산(FMA) 방식으로 계산한다. 각 원소를 곱하고 그값들을 모두 더한다. 이때도 바이어스(편항)도 존재한다.


3. 패딩(padding)
   - 입력 데이터 주변에 특정값(if 0)을 채우는것을 패딩이라 하며 이렇게 하였을 때 출력값의 크기를 조정 할 수 있다. 즉 (4,4)크기의 입력 데이터에 패딩을 1 추가 하면 (6,6) 데이터가 되고 이때 출력은 (4,4)로 바뀐다.


4. 스트라이드(stride)
   - 필터의 윈도우의 이동 하는 값을 나타낸다.


5. 입력 크기 (H,W),필터크기(FH,FW),패딩(P), 스트라이드(S)에 따른 출력크기(OH,OW)계산


6. 합성곱 연산의 형상
   - 채널을 추가한 실제 입력 데이터 처리 관계 즉 채널(색상)이 여러개인 있는 이미지를 합성곱 연산에 넣으면 1개의 채널을 가진 데이터가 출력 데이터가 된다.

  - 이때 필터를 여러개 적용 한다면 출력데이터도 여러개의 채널로 출력 될 수 있기 때문에 CNN에서는 필터가 4차원 데이터 이며 (출력 채널 수 , 입력 채널 수 ,높이 ,너비)로 적용 한다.



   - 배치 처리된 입력 데이터가 들어 왔을 때는 아래와 같이 계산된다. 입력데이터는 (데이터 갯수,채널,높이,너비) 순으로 형상이 이루어 진다.



7. 풀링(Pooling)
   - 풀링은 세로 가로 방향의 공간을 줄이는 연산으로 최대 풀링(max pooling)을 많이 사용하며, 예를 들어 2x2 최대 풀링이라면 2x2 영역에서 최대값의 원소 하나로 집약 하여 출력 한다. 이때 스트라이트 또한 2로 한다. 3x3 이면 스트라이트도 3이다.

8. im2col
   합성곱 연산 시 im2col 함수를 사용하여 4차원 데이터를 2차원 행렬로 반환해주는데 이렇게 하면 합성곱 연산이 보다 간결 해진다.

밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어


신경망 학습 개선 방법

오전 1:17 Posted by PAN.SPOT , , No comments
1. 에폭 (epoch)
   1에폭은 학습에서 훈련데이터를 모두 소진 했을 때의 횟수에 해당 한다. 훈련데이터가 6만개 있다면 미니배치로 100개씩 배치 하였을 때 경사하강법으로 600회 반복하면 100 * 600 = 6만개 가되어 1에폭이 된다.

2. Affine(어파인) 계층
   신경망의 순전파 때 수행하는 행렬의 내적을 어파인 변환이라 한다. 행렬의 내적을 수행하는 계층을 이르는말

2. 최적화 방법(매개변수 갱신법)
   - SGD(확률적 경사 하강법) : 일반적으로 사용되나 비등방성함수(방향에 따라 기울기가 달라지는 함수)에서는 비효율 적이다.
   - 모멘텀(Momentum) : SGD에서 움직임에 대한 변수까지 추가하여 개선한 방법
   - AdaGrad : 학습률을 처음엔 크게 했다가 점차 줄여나가는 방법  (과거의 기울기를 제곱하여 계속 더해 나가는 기법으로 학습강도가 점차 줄어들다가 0이 되는 문제가 있다 이를 개선한 RMSProp 라는 방법도 있다)
   - Adam : 모멘텀과 AdaGrad 방법을 융합 한다는 생각을 기초로 만든 기법 - 최근들어 많이 사용 하는방법

3. 가중치 초기화
   - xavier(재비어) : n = 입력 노드의 수 1 / sqrt(n) 의 표준편차를 가지는 정규화 분포
   - he : ReLU 활성화 함수를 사용 할때 초기화 값으로 많이 사용된다.

4. 배치정규화
   - 각 층의 활성화 값의 분포를 적당히 분포 되도록 조정하는 기법으로 아래와 같은 장점이 있다.
    1. 학습 속도 개선 2. 초깃값에 의존하지 않는다. 3. 오버피팅을 억제한다.
 









5.오버피팅 억제 방법
  - 가중치감소 : L2법칙 에 따라 가중치가 커지는 것을 억제하여 오버피팅이 발생하는 것을 억제한다.
  - 드롭아웃(Dropout) : 신경망 모델이 복잡해싲면서 가중치 감소 만으로 대응이 어려워질때 사용하는 기법으로 훈련 때 은닉층의 노드를 무작위로 골라 삭제 하는 방법이다.

6. 하이퍼 파라미터 최적화
   하이퍼 파라미터란 노드의 수 , 배치의 크기 , 학습률 등 초기에 설장하는 값들을 말한다.
   - 데이터를 훈련데이터,검증데이터,시험데이터로 나눈다.
   - 훈련데이터에서 20% 비율로 검증데이터를 분리한다.
   - 검증테이터는 하이퍼파라미터 성능 평가용으로 사용한다. 이를 분리한 이유는 시험데이터로 하이퍼파라미터를 조정 하면 하이퍼파라미터 값이 시험데이터에 오버피팅 될 수 있기 때문이다.


참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어








2017년 7월 26일 수요일

신경망의 학습과정

오후 6:57 Posted by PAN.SPOT , , No comments

1. 신경망의 학습
   신경망의 학습이란 학습데이터를 가지고 신경망의 가중치 와 바이어스를 업데이트 하여 오차를 줄이고 원하는 결과값을 얻을 수 있도록 하는 기법이다.

2. 오차의 역전파
    신경망의 학습 과정을 통해 입력데이터에 대한 결과를 가지고 정답과 비교한 오차를 출력층 -> 은닉층으로 순전파의 반대 방향으로 가중치를 업데이트 해 나가는 방법을 말한다.

3. 손실함수(비용함수,오차함수)
   여러 이론책에 다양하게 표현되나 같은 뜻을 가지고 있다.  신경망의 성능을 나타내고자 하는 지표로 신경망의 역전파 과정에 사용 된다.
   손실함수로는 평균 제곱 오차(MSE) 와 교차 엔트로피 오차(cross entropy,CEE) 함수가 가장 많이 사용 된다.  교차 엔트로피 함수는 오차가 커질 수록 비용이 급격하게 증가한다.

4. 원-핫 인코딩
   학습과정에서 정답을 표기할 때 원-핫 인코딩 방식을 사용 하는데  한노드만 1로 출력 하고 나머지는 0으로 출력하여 정답인 노드를 1로 출력 하는 분류 모델에서 사용 방식 이다.

5. 가중치 값을 갱신하는 방법
   경사하강법 (DG) : 100개의 학습 데이터가 있다면 가중치값이 100번 갱신된다.
   배치  : 모든 학습 데이터의 하나로 묶어 가중치를 한번만 갱신 할 수있도록 하는 기법
   미니 배치 : DG와 배치방식을 섞어 놓은 개념으로 전체 학습 데이터 중 일부 데이터만 골라서 배치 하는 방법
  딥러닝에 많이 사용되는 방법은 미니 배치 방식 이다.

6. 경사하강법에서의 가중치와바이어스 갱신 방법
   경사 하강법이란 손실함수 즉 결과가 오차가 주어지는 함수 에서 최솟값을 찾아가는 과정이라고 할 수 있다. 이 때 기울기를 이용하는데 손실 함수에서 기울기가 최소화 되는 값을 향해 조금씩 가중치와바이어스를 갱신 한다. 이때 기울기는 손실 함수를 미분하여 얻을 수 있다.
   딥러닝 분야에서는 확률적 경사 하강법(SDG) 확률적으로 무작위로 골라낸 데이터에 대해 수행 하는 경사하강법을 이용한다.


7. 학습률 (learning rate)
   학습률은 미분한 손실함수의 값에서 일정 값을 곱하여 가중치와 바이어스의 갱신률을 조정 하는데 사용되어 진다.



참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어

신경망의 추론과정

오전 1:01 Posted by PAN.SPOT , , No comments
1. 신경망의 순전파
   입력층에서 들어오는 데이터는 각각의 가충지를 곱하고 바이어스를 더하여 은닉층의 노드로 전달되며, 전달된 값은 활성함수를 통해 출력된다. 이를 수치로 나타내면 다음과 같다.
  가중합 : v = w1x2 + w2x2 + .... + b (바이어스)  = wx + b
  출력 :  y = φ(v) = φ(wx + b)      φ = 활성함수



2. 활성함수
    뇌의 뉴런은 입력값이 바로 다른 뉴런으로 전달 되지 않고 어느 분계값에 도달 해야지만 출력값을 생성한다. 입력 신호를 받아 특정 분계점을 넘어서는 경우 출력 신호를 생성 해주는 함수는 활성 함수라 한다. 가장 간단하는 계단 함수가 있으며 계단 함수보다 훨씬 부드러운 S자 형태를 가지는 시그모이드 함수가 활성 함수로 많이 사용되며 출력이 (0~1)로 제한된다. 현시점에서는 시그모이드 함수보다 ReLU 함수가  현업에서 많이 사용된다.




3. 출력층에서의 활성함수
  일반적으로 출력층의 활성함수는 다르게 사용되는데 회귀문제는 항등함수(그대로 출력) 이진분류에서는 시그모이드 함수 다범주분류에서는 소프트맥스 함수를 사용 하는 것이 일반적이며, 소프트맥스 함수의 경우 출력값의 총합이 1인 함수로 출력값의 확률을 계산할때 용이 하다. 다만 지수 계산이 필요하므로 학습에서만 사용되며, 추론 과정에서는 비용이 많이 들지 않는 활성 함수를 사용하는 경우가 많다.

4. 행렬을 이용한 가중합 계산 방법
   신경망 관련서적에는 행렬로 계산 되는 다양한 방법들이 있는데 대중적으로 많이 쓰이는 방법을 사용 하도록 한다.
   
일반적으로 행렬을 표기 할 때 전치행렬 성질을 이용하여 신경망의 좌측 입력 부분을 행렬의 뒤에 연산 한다. 그러므로 입력값은 1차원 벡터를 2차원의 행렬로 변환 후 전치행렬을 이용하여 행과 열을 서로 바꿔야 한다.
전치행렬 성질 : (XW)^T = W^TX^T

5. 배치처리
   일반적으로 입력데이터를 하나씩 계산 하는것 보다 한꺼번에 많은 데이터를 하나로 묶어서 처리하는것이 속도면에서 훨씬 빠르다. 컴퓨터의 수치 계사는 큰 배열을 효율적으로 처리 할 수 있으며 데이터를 읽는 횟수를 줄여 속도를 향상 시킬 수 있다. 이를 행렬로 보면 아래와 같이 가능 하다.
 
해당 행렬은 784개(28x28)의 픽셀가진 이미지를 100장씩 묶어 처리를 하면 출력층의 노드가 10개일 때 100X10의 행렬로 출력 된다.



참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어


신경망이란

오전 12:59 Posted by PAN.SPOT , , No comments
1. 신경망
   머신러닝의 모델 중 하나 이며, 실제 뇌의 뉴런들의 연결을 본따서 만든 것으로
실제뇌는 정보를 저장하는 공간이 따로 없기 때문에 신경세포는 다른 신경 세포에서 오는 신호를 받아 자신의 신호를 내보내는 역할만 하고 이런 신경 세포들의 연결 된 네트워크이며, 신경 세포들의 연결 상태가 바로 뇌에 저장된 정보를 나타낸다.
신경세포 = 노드 , 신경세포들의 연결 = 연결 가중치

2. 신경망의 종류
   그림과 같이 단층 신경망과 다층 신경망이 있으며 , 신경망 성능 향상을 위해서는 다층 신경망을 이용한다. 다만 연산속도등을 고려해서 신경망을 설계한다. 최든 현업에서 사용되는 신경망은 대부분 심층 신경망을 사용한다. 신경망은 크게 입력층,은닉층,출력층으로 나뉜다.


3. 단층 신경망의 한계
   단층 신경망의 경우 XOR 같은 선형 함수로 분리 되지 않는 문제에서는 사용 할 수 없다.




참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어


 





2017년 7월 25일 화요일

머신러닝이란

오후 11:04 Posted by PAN.SPOT , 1 comment

1. 인공지능 머신러닝 딥러닝의 관계
    인공지능 > 머신러닝 > 딥러닝
    딥러닝은 머신러닝의 일종이고 머신러닝은 인공지능의 일종이다.

2. 머신러닝이란
   데이터를 이용한 모델링 기법으로 기계가 학습 데이터를 이용 하여 데이터를 분석 해서 모델을 스스로 찾아내는 것이다.

3. 학습(classification)과 추론(inference)
   학습이란 데이터와 데이터에 대한 결과값으로 최적의 모델(신경망)을 찾아가는 과정을 말한다.
   추론이란 이렇게 학습된 모델(신경망)에 입력 데이터를 넣어 결과를 예측하는것을 말한다.

4. 일반화(generalization)
   학습데이터와 입력데이터가 달라지더라도 성능의 차이가 나지 않게 하는 것을 말한다.

5. 과적합(overfitting)
   그림에서 처럼 모델(곡선)이 동그라미와 세모를 분류 과정 중에 상대 진형으로 깊숙히 침투한 잡음 섞인 데이터 까지 모두 고려하여 만들다 보니 일반화 성능이 떨어지는 현상을 말한다. 훈련데이터가 작고 심층신경망으로 갈수록 더 잘 발생한다.


6. 과적합에 대처하는 정칙화(regularization)와 검증(validation)
   정칙화는 모델의 형태를 최대한 간단히 만들려는 수치해석적인 기법 모델의 성능을 약간 희생 하더라도 모델이 과적합에 빠지지 않게 하려는 의도이다.
   검증은 일반적으로 입력데이터의 차원이 높기 때문에 과적합 여부를 쉽게 판단하기 힘들다 그래서 학습 데이터의 일부를 떼어 내어서 이를 성능 검증용으로 사용하는 기법을 말한다.

7. 지도학습,비지도학습,강화학습
   지도학습이란 입력과 정답을 주어서 학습하는 방법
   비지도학습이란 입력만 주어서 문제의 형태나 유형을 나누는 학습
   강화학습이란 입력과 출력 출력에 대한 평가점수를 주어서 상호작용의 최적화을 위한 학습

8. 분류(classification)와 회귀(regression)
   분류는 입력 데이터를 보고 어느 한 범주에 속하는지 보는 모델
   예를 들면 자동차와 비행기가 입력 데이터로 주어졌을 때 자동차와비행기를 분류해서 결과값으로 출력하는 모델
   회귀란 유적학적으로 개개인의 정보가 부모의 유전종보로 수렴하는 경향이 있다는 뜻으로 정답이 분류와 다르게 값으로 나온다.
   예를 들면 사람 사진으로 보고 몸무게가 얼마인지 추론 하는 모델

9. 군집화(clustering)
   비지도학습에서 나오는 개념으로 데이터의 특성을 분석해서 관련 있는 데이터들 끼리 묵는 것을 말한다.



참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어


2016년 6월 7일 화요일

docker gitlab 설치

오후 10:17 Posted by PAN.SPOT , , No comments
$sudo docker search gitlab
$sudo docker pull gitlab/gitlab-ce
$sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 222:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab
  • docker run 시 옵션은 상황에 맞게 조정하도록 함.

image backup

$sudo docker commit gitlab gitlab-backup //컨테이너 이미지로 저장
$sudo docker save gitlab-backup > ~/gitlab.tar // 이미지 파일로 백업
$sudo docker load < ~/gitlab.tar // 백업한 파일로 복구 

참고 : https://hub.docker.com/r/gitlab/gitlab-ce/

docker 자동완성

오후 5:48 Posted by PAN.SPOT , No comments


docker 자동완성

$cd ~
$curl -o .docker-completion.sh https://raw.githubusercontent.com/docker/docker/master/contrib/completion/bash/docker
$sudo vi .profile
"source .docker-completion.sh" 추가

2016년 4월 25일 월요일

opensource cloud owncloud 설치 방법 ubuntu용

오후 11:33 Posted by PAN.SPOT No comments
xUbuntu_14.04 owncloud-9.0.1-3.1
You can add the repository key to apt. Keep in mind that the owner of the key may distribute updates, packages and repositories that your system will trust (more information). Run the following shell commands as root to trust the repository:
wget -nv https://download.owncloud.org/download/repositories/stable/xUbuntu_14.04/Release.key -O Release.key
apt-key add - < Release.key
Run the following shell commands as root to add the repository and install from there.
sh -c "echo 'deb http://download.owncloud.org/download/repositories/stable/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/owncloud.list"
apt-get update
apt-get install owncloud

아파치 웹서버 포트 변경
vi /etc/apache2/ports.conf
Listen "포트 번호"

해당 포트로 접속 시 owncloud로 접속 가능

2016년 2월 15일 월요일

git ^M 문자 제거 및 diff ^M 문자 표시 제거

오후 6:35 Posted by PAN.SPOT , , No comments


linux 사용자일 경우 아래와 같이 설정 하면 된다.


$ git config --global core.autocrlf input

$ git config --global core.whitespace \ trailing-space,space-before-tab,cr-at-eol


보다 자세한 내용은 아래참조.

(출처 : https://git-scm.com/book/ko/v1/Git%EB%A7%9E%EC%B6%A4-Git-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0)


core.autocrlf

윈도에서 개발하는 동료와 함께 일하면 줄 바꿈(New Line) 문자에 문제가 생긴다. 윈도는 줄 바꿈 문자로 CR(Carriage-Return)과 LF(Line Feed) 문자를 둘 다 사용하지만, Mac과 Linux는 LF 문자만 사용한다. 아무것도 아닌 것 같지만, 크로스 플랫폼 프로젝트에서는 꽤 성가신 문제다.
Git은 커밋할 때 자동으로 CRLF를 LF로 변환해주고 반대로 Checkout할 때 LF를 CRLF로 변환해 주는 기능이 있다. core.autocrlf 설정으로 이 기능을 켤 수 있다. 윈도에서 이 값을 true로 설정하면 Checkout할 때 LF 문자가 CRLR 문자로 변환된다:
$ git config --global core.autocrlf true
줄 바꿈 문자로 LF를 사용하는 Linux와 Mac에서는 Checkout할 때 Git이 LF를 CRLF로 변환할 필요가 없다. 게다가 우연히 CRLF가 들어간 파일이 저장소에 들어 있어도 Git이 알아서 고쳐주면 좋을 것이다.core.autocrlf 값을 input으로 설정하면 커밋할 때만 CRLF를 LF로 변환한다:
$ git config --global core.autocrlf input
이 설정을 이용하면 윈도에서는 CRLF를 사용하고 Mac, Linux, 저장소에서는 LF를 사용할 수 있다.
윈도 플랫폼에서만 개발하면 이 기능이 필요 없다. 이 옵션을 false라고 설정하면 이 기능이 꺼지고 CR 문자도 저장소에도 저장된다:
$ git config --global core.autocrlf false

core.whitespace

Git에는 공백 문자를 다루는 방법으로 네 가지가 미리 정의돼 있다. 두 가지는 기본적으로 켜져 있지만 끌 수 있고 나머지 두 가지는 꺼져 있지만 켤 수 있다.
먼저 기본적으로 켜져 있는 것을 살펴보자. trailing-space는 각 줄 끝에 공백이 있는지 찾고 space-before-tab은 모든 줄 처음에 tab보다 공백이 먼저 나오는지 찾는다.
기본적으로 꺼져 있는 나머지 두 개는 indent-with-non-tab과 cr-at-eol이다. intent-with-non-tab은 tab이 아니라 공백 8자 이상으로 시작하는 줄이 있는지 찾고 cr-at-eol은 줄 끝에 CR 문자가 있어도 괜찮다고 Git에 알리는 것이다.
core.whitespace 옵션으로 이 네 가지 방법을 켜고 끌 수 있다. 설정에서 해당 옵션을 빼버리거나 이름이-로 시작하면 기능이 꺼진다. 예를 들어, 다른 건 다 켜고 cr-at-eol 옵션만 끄려면 아래와 같이 설정한다:
$ git config --global core.whitespace \
    trailing-space,space-before-tab,indent-with-non-tab

2016년 2월 14일 일요일

git 명령어 모음

오후 7:52 Posted by PAN.SPOT , , No comments

git 유용한 명령어 모음

  • 삭제된 파일만 되돌리기
    • git ls-files -d | xargs git checkout --
  • git remote 정보 보기
    • git remote show origin
  • branch 생성과 동시에 checkout 하기
    • git checkout -b <branch>
  • branch 생성과 동시에 checkout 하고 remote와 동기화 하기
    • git checkout -b <branch> origin/<branch>
  • 로컬 브랜치를 원격 브랜치로 push 하기
    • git push origin <branch>
  • 로컬 브랜치를 remote의 master브랜치에 push 하기
    • git push origin <branch>:master
  • 로컬 브랜치 삭제하기
    • git branch -D <branch>
  • 원격 브랜치 삭제하기
    • git push origin :<branch>
    • git push origin :heads/<branch>
  • 원격 브랜치와 로컬브랜치 tracking 정보 설정
    • git branch --set-upstream-to=origin/<branch> <branch>
  • git pull 할 때 3-way merge message 없이 깔끔하게 pull 하기
    • git pull --rebase
  • git pull --rebase 기본 옵션으로 사용하기
    • git config --global pull.rebase true
  • 임시저장 - commit 하지 않고 다른 git 명령어 사용하고 싶을때(pull,push등)
    • git stash //임시저장
    • git stash pop //임시저장 불러오기
  • 마지막 커밋 메세지 수정
    • git commit --amend
  • git tag 목록
    • git tag
  • git tag 생성
    • git tag v1.1 //Lightweight
    • git tag -a v1.1 -m "message"//Annotated
  • git tag push
    • git push origin --tags
  • git tag 삭제
    • git tag -d v1.1
  • 원격 tag 삭제하기
    • git push origin :<tag>
    • git push origin :tags/<tag>
  • merge 충돌 없이 하기
    • git merge -Xours <branch> (작업사본 우선)
    • git merge -Xtheirs <branch> (대상 우선)
  • log option
    • git log OPTION
OPTION
  • -p 각 커밋에 적용된 패치를 보여준다.
  • --stat 각 커밋에서 수정된 파일의 통계정보를 보여준다.
  • --shortstat --stat 명령의 결과 중에서 수정한 파일, 추가된 줄, 삭제된 줄만 보여준다.
  • --name-only 커밋 정보중에서 수정된 파일의 목록만 보여준다.
  • --name-status 수정된 파일의 목록을 보여줄 뿐만 아니라 파일을 추가한것인지, 수정한 것인지, 삭제한 것인지도 보여준다.
  • --abbrev-commit 40자 짜리 SHA-1 체크섬을 전부 보여주는 것이 아니라 처음 몇 자만 보여준다.
  • --relative-date 정확한 시간을 보여주는 것이 아니라 “2 weeks ago”처럼상대적인 형식으로 보여준다.
  • --graph 브랜치와 머지 히스토리 정보까지 아스키 그래프로 보여준다.
  • --pretty 지정한 형식으로 보여준다. 이 옵션에는 oneline, short,full, fuller, format이 있다. format은 원하는 형식으로 출력하고자 할 때 사용한다.
  • format option
    • git log --pretty=format:"OPTION"
FORMAT OPTION
  • %H 커밋 해시
  • %h 짧은 길이 커밋 해시
  • %T 트리 해시
  • %t 짧은 길이 트리 해시
  • %P 부모 해시
  • %p 짧은 길이 부모 해시
  • %an 저자 이름
  • %ae 저자 메일
  • %ad 저자 시각 (형식은 –date= 옵션 참고)
  • %ar 저자 상대적 시각
  • %cn 커미터 이름
  • %ce 커미터 메일
  • %cd 커미터 시각
  • %cr 커미터 상대적 시각
  • %s 요약

2016년 1월 5일 화요일

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:
        ab-cd-e-fg

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 http://pkg.jenkins-ci.org/debian binary/
Update your local package index, then finally install Jenkins:
sudo apt-get update
sudo apt-get install jenkins
See Wiki for more information, including notes regarding upgrade from Hudson.

※ 만약 8080포트가 사용 중이라면 /etc/default/jenkins에서 HTTP_PORT를 변경하여 재시작.

3. plugin 설치 

jenkins에 접속 하여 gitlab plugin 설치

4. ssh key 설정
sudo su - jenkins
git config --global user.name "jenkins"
git config --global user.email "jenkinse@DOMAIN"
ssh-keygen -t rsa -C "jenkins@DOMAIN"

gitlab의 jenkins에서 사용할 프로젝트의 설정에서 Deploy Keys로 추가하여 권한을 준다.





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,noserverino

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 사용자 기준
  1. openvpn client 설치 https://openvpn.net/index.php/open-source/downloads.html
  2. https://serverip:943/ 여기로 접속
  1. openvpn connect를 설치 해도 되지만 다른os에서도 사용 하기위해 로그인으로 변경하여 로그인한다.
  1. openvpn 프로파일을 다운 받는다.
  1. C:\Program Files\OpenVPN\config 폴더에 다운받은 프로파일을 저장한다.
  2. openvpn client gui를 실행하여서 사용자와비밀번호를 입력하고 (추가하지 않았다면 openvpn/설정한비번) connect 한다.