5월, 2014의 게시물 표시

Exceptional C++ Style : 15. 접근 권한의 사용과 오용

이미지
Access Modifiers public protected private class 자신 접근 가능 접근 가능 접근 가능 파생 class 접근 가능 접근 가능 접근 불가 friend 접근 가능 접근 가능 접근 가능 외부 접근 가능 접근 불가 접근 불가 위의 표를 보면 private나 혹은 protected는 외부에서 접근이 불가능하다고 하지만 방법이 없는 것은 아니다. 표준을 만족하지 않고 이식성(Portability)을 만족하지 않는 많은 편법이 존재하고 있으며 그 중 악명높은 방법들을 3가지로 압축하고 있다. Forger(위조범) Pocketpicker(소매치기) The Cheat(사기꾼) 그리고 표준을 완전히 만족하면서 이식성도 보장하는 1가지 방법을 소개한다. 다음 코드를 예로 설명하면 // X.h #ifndef X_H_ #define X_H_ #include <stdio.h> class X { private:    int private_; public:    X() : private_(1) {}    virtual ~X();    template<class T>    void f(const T& t) {    }    int Value() {        return private_;    } }; #endif /* X_H_ */ 위의 코드는 private_라는 private member를 가지고 있고 1로 초기화 되어 있으며 해당 값을 변경할 수 있는 member function을 제공하지 않는다. 이 값을 앞서 말한 3가지 편법과 1가지 적법을 이용하여 변경해보면, Forger(위조범) X.h의 X class의 정의를 복사하고 friend를 추가한다. 이 방법이 위법인 이유는 ODR(One Definition Rule) 을 위반하기 때문이다. 단, 하

Ubuntu에서 wireshark 사용하기

이미지
Ubuntu에 wireshark를 처음 설치 하고 실행하면 network interface가 보이지 않아 패킷 캡춰를 할 수 없다. 이유는 권한 문제인데 super user 권한으로 실행하면 된다..  문제는 매번 이렇게 하기 귀찮다라는 것. terminal에 이렇게 입력해 보자 $ sudo dpkg-reconfigure wireshark-common 위 화면이 나오면 wireshark를 root 권한으로 쓰는 것의 대안으로 Dumpcap을 설치하고 일반 사용자도 패킷 캡춰할 수 있도록 할꺼냐고 물어본다.  <Yes> 를 선택한 후 wireshark를 실행하면  일케 나온다.. -_-  ls로 해당 파일의 속성을 보면 헐.. file permission이 owner랑 group에만 실행 가능 하다고 나와 있다. -_-;; 일반 사용자도 쓸수 있다며;; (이해 안되면  FilePermissions  참고 하시길..) 아래와 같이 실행 권한을 주자. $ sudo chmod +x /usr/bin/dumpcap 다시 파일 속성을 확인 하면 마지막에 실행 권한이 추가되었음을 확인 할 수 있다. 다시 wireshark 실행하면 아래와 같이 network interface가 정상적으로 잡힘을 확인 할 수 있다. 끝.

Ubuntu colorgcc 설정

이미지
Terminal에서 gcc로 Build 할때 compile log가 너무 많으면 error log를 찾기 너무 힘들다. 그래서 찾아본 것이 "colorgcc". colorgcc는 compile log를 error는 빨간색,  code line은 파란색,  warning은 노란색 으로 표시해준다. 설치해 보자. $ sudo apt-get install colorgcc 설치 후 아래와 같이 gcc를 호출하면 colorgcc를 알아서 호출하도록 설정한다. $ cd /usr/local/bin $ ln -s /usr/bin/colorgcc gcc $ ln -s /usr/bin/colorgcc g++ 실행해보면 설치전 아래와 같이 삭막한 log를 이렇게 화사하게 바꿔준다 ㅋ 끝.

Ubuntu 14.04 한글키 설정

이미지
Ubuntu 14.04 첫 설치 후 매우 당황하게 만들었던 점이 한글.. Unity에 한글이 깨져서 ???로 보이는 문제와 한영 전환이 되지 않는 것 이었다. 추가로 한글의 윗부분이 잘리는 문제도 있고.. ㅋ Unity에 한글이 깨지는 문제랑 한글 윗부분이 잘리는 것은 언젠간 고쳐주겠지.. 어짜피 home에 한글 폴더가 생기는것도 싫고 Unity에 ???도 보기 싫어 Language를 영문으로 변경 ㅋ 한글만 입력 되는 것은 키보드에서 영어 키보드를 추가해주면 된다. 일단 한글 영문 전환 설정만 고쳐보겠다. 나머지 문제도 다 고치고 싶다면 우분투 한국 커뮤니티 > 팁 게시판 에 가면 능력자분들이 정리 해놨으니 참고 하시고, System Setting을 실행하면 보이는 첫째 줄 제일 오른쪽에 있는 "Text Entry"를 클릭하면 아래의 화면이 나온다. 만약 언어를 한글로 설치했다면 한글(Hangul)만 보인다. 아래 + 를 눌러서 English(US)를 추가해 주자. 위와 같이 추가 해줘도 키보드의 한글키로 전환은 아직 안된다. 위 그림의 switch to next source using을 Hangul키로 set하고 싶어도 alt, ctrl, shift중 하나를 사용한 단축키를 설정하라고 나온다. 우분투 14.04의 사용자 정의 단축키 정책이 그렇게 바뀐듯. ㅋ Hangul 키를 단축키로 사용하려면 dconf-editor 를 사용하여 편집하면된다. 먼저 깔자. $ sudo apt-get install dconf-editor 설치 완료 후 실행하면 아래와 같은 화면이 나온다. 왼쪽 tree menu에서 org > gnome > desktop > wm > keybinding  을 선택하면 나오는 오른쪽 목록에서 "switch-input-source"의 값을 아래와 같이 "Hangul" 로 변경한다.

용어 정리

이미지
Bandwidth    wiki   텀즈 일반적인 대역폭 ( bandwidth )은 특정한 기능을 수행할 수 있는 주파수 의 범위로,  Hz  단위로 측정된다.  멀티미디어에서는 bandwidth의 의미가 다르며 단위는 bps를 사용한다.  Hz는 초당 주파수이고 bps는 초당 bit이다. 0/1을 주파수에 실어 보내는 방식이 여러가지이기 때문에 Hz와 bps를 연관짓기는 어렵다. 그러나 방식이 같다면 Hz와 bps는 비례한다고 볼수 있겠다. Streaming contents의 metadata의 bandwidth는 해당 streaming을 위해 필요한 bandwidth를 의미하며, 예로 bandwidth = 300kbps이면 해당 content를 재생하기 위해선 네트워크가 1초에 300kbit를 전송할 수 있어야 한다는 얘기다. BitRate   wiki 1초에 해당하는 media에 들어갈 수 있는 bit로  BitRate가 높다는 것은 1초를 표현하기 위해 사용하는 bit가 많다는 것이고 이것은 media의 quaily가 높다는 것을 의미한다.  RTP Realtime Transport Protocol의 약자. UDP의 문제를 보완하기 위한 Protocol로 Header에 Sequence Number와 TimeStamp 및 코덱 정보등을 포함하고 있다. Payload type(PT) : Audio/Video encoding type Sequence number : 패킷의 순서 Timestamp : 데이터 패킷의 첫번째 byte의 TimeStamp Syncronization Source(SSRC) : 전송되는 stream의 id. 예로 복수개의 channel(한국어 음성/ 영어 음성)을 동시에 streaming 할 경우 해당 필드로 각각의 streaming이 어느 channel인지 구분. etc. Muticast와 unicast 모두 가능하다. 네트워크 layer중 Transport layer에 위치. R