자택경비대

파이썬의 다중 대소비교

Programming

파이썬에서 1 < 3 and 3 > 21 < 3 > 2 식으로 줄여서 사용이 가능하다.

물론 result = 1 < 3; result > 2 식으로 여러 행에 걸쳐 처리하게 되면, 예상대로 문제가 발생하지만 (True > 2 == False이기 때문에..) 한 줄로 처리하게 되면 and로 결합한 것 과 같은 결과를 나타낸다.

범위 표현식을 간결하게 표현 할 때 상당히 유용할 것 같다.

몰랐던 사실..

>>> 1 < 3 > 2
True
>>> 1 < 3
True
>>> True > 2
False
>>> 1 < 3 and 3 > 2
True

fatal error: pcap.h: No such file or directory 오류 해결법

Programming

pcap 라이브러리를 컴파일러가 인식하지 못하여 발생하는 에러이다.

라이브러리가 설치되어있지 않다면 아래의 명령어를 통해 설치 할 수 있다.
sudo apt-get update && sudo apt-get install libpcap-dev

설치 후에도 문제가 발생한다면 -I 옵션을 통해 경로를 지정하여 에러를 해결하거나, -lpcap 옵션을 통해서 해결이 가능하다.

Gist에 이미지를 업로드 하는 방법

Programming
  1. 우선 자신만의 gist를 만드세요.

  2. 생성한 gist를 다음과 같은 명령어로 clone 합니다. (<hash>를 자신의 gist의 해쉬 값으로 변경하세요):

     # with ssh
     git clone git@gist.github.com:<hash>.git mygist
    
     # with https
     git clone https://gist.github.com/<hash>.git mygist
  3. clone한 gist의 경로로 이동합니다:

    cd mygist
  4. 이미지를 추가하고 커밋합니다.:

     git add tulip.jpg
     git commit -m "Add tulip to gist"
  5. push 명령어로 원격 저장소를 업데이트 합니다:

     git push origin master

다음 블로그 포스팅 내용도 확인해보세요 -> post.

출처

+추가

위 과정을 자동화하는 프로그램 https://github.com/Xvezda/fist

VIM :help 전체화면으로 보는방법

Programming

기본적으로는 :help 명령어를 사용해서 도움말을 보게되면 절반정도 크기로 창이 열리게 되는데
one-line 명령어로 :help <keyword> | only 처럼 only를 붙여주면 전체크기로 열리게 된다.

VIM script로 파일 경로 문자열에서 파일명 뽑아내는 방법

Programming

fnamemodify 함수를 사용해서 아래와 같이 절대 경로에서 파일명만 추출하는것이 가능하다.

" echo baz
echo fnamemodify('/foo/bar/baz', ':t')

Unix/Linux 명령어 옵션 벤치마크 하는방법

Programming

time 명령어를 사용하여, 인자로 전달된 명령어의 실행 시간, CPU 사용량 등을 측정하여 보여주도록 할 수 있다.


make 명령어의 옵션 측정 예

# time make
make  16.50s user 1.73s system 98% cpu 18.561 total
make -j4  19.80s user 2.07s system 329% cpu 6.634 total
make -j8  23.94s user 2.35s system 472% cpu 5.568 total

Makefile에서 dependency가 누락되는 현상 해결법

Programming

예를 들면 다음과 같다:

all: foo bar

foo:
    echo foo

bar:
    echo bar

이렇게 Makefile이 존재할 때 make all을 하면 foo는 실행되는데 bar은 안된다던가, bar는 실행되지만 foo를 건너뛰는 등의 경우이다.

이런 경우에는 같은 폴더에 foo, bar과 같은 이름의 폴더가 존재하기 때문에 이런 결과가 나타난다.

해결방법은 .PHONY 구문을 이용하여 예외로 지정해주면 간단히 해결된다.

.PHONY: foo bar
all: foo bar

foo:
    echo foo

bar:
    echo bar

google test 컴파일 에러 해결법

Programming

google test는 C++ 단위 테스트 환경 구축을 위한 프레임워크이다.

In file included from sample.cpp:1:
In file included from /usr/local/include/gtest/gtest.h:62:
In file included from /usr/local/include/gtest/internal/gtest-internal.h:40:
/usr/local/include/gtest/internal/gtest-port.h:826:12: error: no member named
      'make_tuple' in namespace 'std'
using std::make_tuple;
      ~~~~~^
/usr/local/include/gtest/internal/gtest-port.h:827:12: error: no member named 'tuple' in
      namespace 'std'
using std::tuple;
      ~~~~~^
/usr/local/include/gtest/internal/gtest-port.h:906:3: warning: deleted function
      definitions are a C++11 extension [-Wc++11-extensions]
  GTEST_DISALLOW_ASSIGN_(RE);
  ^
/usr/local/include/gtest/internal/gtest-port.h:672:34: note: expanded from macro
      'GTEST_DISALLOW_ASSIGN_'
  void operator=(type const &) = delete
                                 ^
/usr/local/include/gtest/internal/gtest-port.h:949:3: warning: deleted function
      definitions are a C++11 extension [-Wc++11-extensions]
  GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog);
  ^
/usr/local/include/gtest/internal/gtest-port.h:677:24: note: expanded from macro
      'GTEST_DISALLOW_COPY_AND_ASSIGN_'
  type(type const &) = delete; \
...

위의 에러는 google test를 포함한 테스트 코드가 -std=c++11 혹은 이상의 플래그를 포함하지 않아서 발생하는 문제이다.

Makefile의 경우에는 CXXFLAGS=-std=c++11을 추가해주면 해결된다.


+추가내용)

Undefined symbols for architecture x86_64:
"testing::Test::SetUp()", referenced from:
...

위의 경우에는 라이브러리가 연결되지 않아서 발생하는 문제이다.

마찬가지로 Makefile에서는 LDLIBS=-lgtest_main -lgtest -pthread 플래그를 추가하여 해결 할 수 있다.