'프로그래밍'에 해당되는 글 69건
- 2015.09.10 파일 로깅
- 2015.09.04 c++11 pair<> class
- 2015.09.01 sublime text 2 plugin development
- 2015.08.11 secure socket programming
- 2013.12.09 Installation of ipython on cygwin
- 2013.12.06 JavaScript Semicolon (세미콜론)
- 2013.12.05 cygwin repo
- 2013.12.05 JavaScript 기본 래퍼 타입
- 2013.12.02 winsock broadcast 예제 소스
- 2013.11.28 c++ unsigned 변수
c++11 pair<> class
프로그래밍/C++ 2015. 9. 4. 14:20 |pair<> 클래스
pair 는 c++98 에도 이미 제공되고 있었다.
pair 는 두 객체를 하나의 타입으로 묶어 사용한다.
예를들면, 2차원 평면 상에서 좌표를 표현하는 경우 다음과 같이 사용할 수 있다.
또 map 계열의 클래스는 키와 값의 쌍으로 구성되는데 이때도 pair 를 사용한다.
각 타입은 template 으로 정의 되므로 다른 타입이 사용될 수 있다.
pair 를 선언을 하면 선언 시에 사용된 객체의 default constructor 가 불리며 int 와 같은 primitive 타입이라면 0 으로 초기화 된다.
pair 정의 코드
pair 는 c++11 에서 크게 확장된 것은 없지만 표준 확장에 따라 move constructor 가 제공되고 swap() 이 추가되었다.
그 외 사용법은 c++98 에 비해 크게 달라진 점은 없다.
멈버 변수인 first 와 second 가 public 으로 선언되어 있기 때문에 접근 제한 없이 사용할 수 있다.
pair 를 간단히 생성하기 위해서 make_pair() 라는 함수가 존재한다.
make_pair 는 객체 생성을 위해 따로 타입을 쓰지 않아도 된다.
위 코드 대신 아래와 같이 사용할 수 있다.
make_pair 의 코드:
c++11 의 make_pair 는 rvalue 인자를 받으므로,
해당 타입이 move semantics 를 지원한다면 인자로 전달된 객체가 변경된다.
간단한 테스트 코드 :
sublime text 2 plugin development
프로그래밍 2015. 9. 1. 16:36 |http://www.sublimetext.com/docs/plugin-basics
http://code.tutsplus.com/tutorials/how-to-create-a-sublime-text-2-plugin--net-22685
http://code.tutsplus.com/tutorials/sublime-text-2-tips-and-tricks--net-21519
examples :
http://www.sublimetext.com/docs/plugin-examples
api references :
http://www.sublimetext.com/docs/api-reference
대략의 설명
패키지는 폴더로 만들어 져서 Package 디렉토리에 넣으면 된다.
나의 패키지는 "Preferences > Browse Packages…" 메뉴를 통해 들어가면 된다.
패키지는 zip 파일로 묶은 다음 확장자를 .sublime-package 로 바꿔 단일 파일로 사용 가능하다.
보통 language 관련 패키지가 있고, 그 외 Default, User 패키지가 있다.
- Default : 모든 표준 키 바인딩, 메뉴 정의, 파일 설정, 파이썬으로 만든 모든 플러그인
- User : 마지막에 로딩 되어 기본 값들을 덮어 씀
기본 구현
Tools > New Plugin... 메뉴 선택
바로 이런 게 생긴다.
일단 Packages/ 에서 폴더를 하나 만들고 그 안에 py 파일로 저장한다.
파일 이름은 뭐든 관계 없고, 관례적으로 플러그인 이름을 사용한다.
저장이 되었으면, 콘솔을 열고 (단축키 : Ctrl + ' ) 다음과 같이 입력하면
파일 첫 부분에 "Hello World" 가 삽입된다.
Command Type
Sublime plugin 은 다음 세 가지 command type 을 제공한다.
- Text Commands : View 오브젝트를 통해 file 이나 buffer 에 접근
- Window Commands : Window 오브젝트를 통해 현재 창을 참조
- Applications Commands : 위 두가지에 속 하지 않는.
sublime_plugin.TextCommand 를 상속 받은 class 의 이름에서 'Command' 를 제외한 나머지 부분,
CamelCase 형식의 이름을 under_score 형식으로 변경한 것이 커맨드 이름이 된다.
(예를 들면, 클래스 이름이 MyOwnCommand 라면 my_own 이 커맨드 이름이 된다.)
단축키 추가하기
패키지 안에 다음과 같이 파일을 추가한다.
Preferences > Key Bindings – Default 를 통해 겹치지 않는 단축키를 택하면 된다.
다음과 같이 추가하면 된다.
커맨드의 인자가 필요하면 뒤에다 arg 로 붙인다.
OSX 에서 커맨드 키는 super 라고 쓴다.
메뉴 추가하기
대략 .sublime-menu 파일을 만들면 된다.
- Main.sublime-menu : 메인 메뉴
- Side Bar.sublime-menu : 파일이나 폴더에서 오른쪽 클릭 후 팝업 메뉴
- Context.sublime-menu : 에디터에서 오른쪽 클릭 후 팝업 메뉴
secure socket programming
프로그래밍/C++ 2015. 8. 11. 14:00 |secure socket programming
server
컴파일 :
client
컴파일 :
references:
[1] Secure programming with the OpenSSL API, Part 1: Overview of the API : http://www.ibm.com/developerworks/library/l-openssl.html
[2] Korean Version of [1] : http://hasu0707.tistory.com/153
[3] Secure Server Client using OpenSSL in C : http://simplestcodings.blogspot.kr/2010/08/secure-server-client-using-openssl-in-c.html
[4] HTTPS와 SSL 인증서 : http://opentutorials.org/course/228/4894
[5] SSL/TLS Programming : http://www.cs.odu.edu/~cs772/fall08/lectures/ssl_programming.pdf
Installation of ipython on cygwin
프로그래밍/tips 2013. 12. 9. 17:55 |ipython
대략 ipython.tar.gz 파일을 다운로드 받은 후에 아래와 같이 실행
$ tar -xzf ipython.tar.gz $ cd ipython $ python setup.py install
상세한 내용은 http://ipython.org/ipython-doc/stable/install/install.html [2]
ipython notebook
1. Tornado
https://github.com/downloads/facebook/tornado/tornado-2.4.1.tar.gz
$ tar -xzf tornado-2.4.1.tar.gz $ cd cd tornado-2.4.1/ $ python setup.py build $ python setup.py install
2. zeroMQ
https://github.com/downloads/zeromq/pyzmq/pyzmq-2.2.0.1.tar.gz
$ tar -xzf pyzmq-2.2.0.1.tar.gz $ cd pyzmq-2.2.0.1/ $ python setup.py build $ python setup.py install
cygwin 에서 실패한다면, [4] 참조
$ wget 'http://download.zeromq.org/zeromq-2.1.7.zip' $ unzip zeromq-2.1.7.zip $ cd zeromq-2.1.7 $ ./configure $ make ... succeeds... $ make install ...
$ wget --no-check-certificate 'https://github.com/downloads/zeromq/pyzmq/pyzmq-2.1.7.zip' $ python setup.py configure --zmq=/usr/local $ cd pyzmq-2.1.7 $ python setup.py build $ python setup.py install
아놔 ... 근데 왜 나는 안 되지 ㅠㅠ
references :
[2] http://ipython.org/ipython-doc/stable/install/install.html
[3] http://ipython.org/ipython-doc/rel-1.1.0/interactive/public_server.html
JavaScript Semicolon (세미콜론)
프로그래밍/JavaScript 2013. 12. 6. 09:42 |http://www.w3schools.com 에는 대략 이렇게 쓰여져 있다.[1]
Semicolon ;
Semicolon separates JavaScript statements.
Normally you add a semicolon at the end of each executable statement.
Using semicolons also makes it possible to write many statements on one line.
You might see examples without semicolons. Ending statements with semicolon is optional in JavaScript. |
자바스크립트엔 auto semicolon insertion(ASI) 가 동작하며, 세미콜론을 붙이지 않아도 자동으로 들어간다.
또한 ASI 로 인해서 공백문자(특히 newline)도 중요해진다. [2]
c/java 등에서 연산자 우선순위를 신경쓰지 않고 괄호를 사용하듯이
자바스크립트에서 ASI 규칙에 의존하기 보단 세미콜론을 항상 다는 것이 이롭다.
http://en.wikipedia.org/wiki/JavaScript_syntax
위 링크에 이와 관련한 자바스크립트 문법 예제가 몇 있다.
한 가지 예를 보자면
대략 이런 일이 일어날 수도 있다.
ASI 의 원리를 대략 이해하고, 들여쓰기 등의 규칙을 절대적으로 준수하고 세미콜론을 항상 붙이자.
references :
cygwin repo
프로그래밍/tips 2013. 12. 5. 16:49 |repo 다운로드
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
chmod +x /usr/bin/repo
그냥 다운받아서 적당한 위치에 놓고 실행 모드로 설정만 해 주면 된다.
references :
http://source.android.com/source/downloading.html
JavaScript 기본 래퍼 타입
프로그래밍/JavaScript 2013. 12. 5. 09:40 |JavaScript 기본 래퍼 타입을 직접 사용하면 안 좋은 일이 일어날 수 있다.
x 를 객체 타입으로 사용하여, if 검사에서 null 또는 undefined 가 아닌 값으로 체크되어 true 가 되었다.
winsock broadcast 예제 소스
프로그래밍/C++ 2013. 12. 2. 15:18 |대략 winsock 으로 braodcast 하는 c++ 소스입니다.
아래는 테스트용 reader 코드
references :
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=7103&ref=7103
http://blog.daum.net/jjiyong/12873890
c++ unsigned 변수
프로그래밍/C++ 2013. 11. 28. 10:00 |c/c++ 에서 unsigned 변수를 사용할 땐 주의해야 합니다.
수식에서 signed 변수와 unsigned 변수를 섞어 사용하면 타입 변환이 일어납니다.
타입 변환 규칙을 분명히 알고 사용해야 합니다.
(어렵지는 않습니다. 다른 타입을 가지는 변수들의 연산 결과는 더 넓은 표현 범위의 타입을 가집니다.
고로 signed int 와 unsigned int 의 연산 결과는 unsigned int 입니다.
결과는,
4294967295 4294967295 -1 |
입니다.
또한 unsigned 변수를 뺄셈에 사용하면 역시 버그가 발생할 가능성이 생깁니다.
결과가 음수가 나오면 overflow 가 발생하여 예상치 못한 결과가 발생할 수 있습니다.
논리적으로 음수가 절대 발생하지 않는 경우 unsigned 변수를 사용하는 것은 장점이 됩니다.
변수가 0 보다 작은 지를 체크하지 않아도 되기 때문이죠. 예를 들면
하지만 좋은 방법은 아니지만, 의도한 경우 이렇게 사용할 수는 있습니다.
약간의 장점이 있지만, 조심해서 사용해야합니다.
제 생각엔 몇 가지 경우를 제외하면 가능한 unsigned 변수를 사용할 필요가 없다고 생각합니다.
대략 count, size 를 표현해야 하는 경우에만 사용하면 되지 않을까 생각합니다.
java 에는 unsigned 변수 타입이 없습니다. (굳이 따지면 char 는 unsigned 타입이긴 합니다만)
왜냐하면 약간의 장점에 비해 복잡하기 때문입니다.