맥OS 포토샵 CS5 설치 및 사용

2012/01/14 20:29
요번에 중고로 구입한 맥북에 포토샵을 설치해 보았다.
(맥OS 버전은 라이온이다.)

다음 블로그 포스팅 참조
http://blog.naver.com/PostView.nhn?blogId=rlawodhr93&logNo=30119369571 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Software Dev Note > 매킨토시' 카테고리의 다른 글

맥OS 포토샵 CS5 설치 및 사용  (0) 2012/01/14

Dev고양이 Software Dev Note/매킨토시 맥 포토샵, 맥OS, 설치, 포토샵

맥북 중고 구입. (2008 late)

2012/01/14 02:10
아이폰 어플리케이션 개발을 하기위해 벼르던 중, 적당한 물건을 구입하게 되었다.

2008년 late 버전 맥북. 13인치 이고, 맥북이지만 맥북프로처럼 알루미늄 바디이다.

기존에 사용하던 노트북인 컴팩 CQ40 과 나란히 사진을 찍었다.

 



둘 다 같은 13인치 이지만, 맥북이 훨씬 얇고, 전체적인 크기가 작다.
게다가 가볍기까지 하다.

결론은, 일단 매우 만족스럽다.
사용은 더 해봐야 하겠지만, 한동안 둘 다 사용하게 될 것 같다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 = ( Review ) 2008 late 맥북, Macbook, 맥북, 맥북 2008

자료조사(9) - RTP Packet Payload Type

2012/01/03 07:26
본 포스팅은 이번 프로젝트에서 사용하는 RTP 패킷에 대한 자료조사 덧붙임이다.
RTP 패킷의 헤더에는 데이터 형식을 지정하는 PT(Payload Type) 필드가 있다.
8비트가 할당되므로 0~255 까지의 숫자로 표현된다.

이번 프로젝트에서는 PCMA ( G.711 코덱 ) 형식의 음성 데이터를 주고 받는데, 해당 PT 번호는 8번이다.
아래는 몇가지의 PT번호를 나타내는 표이며 출처에 표기한 사이트에서 발췌하였다.

출처 : http://www.packetizer.com/in/q9.html

The information in this article applies to: H.323, H.225.0, H.245, RTP (RFC 3550)

If there is a static payload type defined for a media, it must be used. Several endpoints currently violate this requirement. Here are the relevant passages in H.225.0v2. 6.2.1: "Payload Type(PT): Only ITU-T payload types such as (0)[PCMU], (8)[PCMA], (9)[G722], and (15)[G728] shall be used. Dynamic payload types exchanged using H.245 signaling shall be used for any ITU-T payload types not listed in Annex B." 6.2.2: "Payload Type(PT): Only ITU-T payload types such as that for H.261 shall be used. Dynamic payload types may be used for H.263 or other ITU-T algorithms for which payload types do not exist." (A payload has been defined for H.263 since this was written, so now the static payload type of 34 must be used for H.263.)
    PT         encoding      audio/video    clock rate    channels
               name          (A/V)          (Hz)          (audio)
 
    0          PCMU          A              8000          1
    8          PCMA          A              8000          1
    9          G722          A              8000          1
    4          G723          A              8000          1
    15         G728          A              8000          1
    18         G729          A              8000          1
    31         H261          V              90000
    34         H263          V              90000
    96--127    dynamic       ?
 
    Table 2/Annex B-H.225.0:
    Payload types (PT) for standard audio and video encodings


 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 = ( 수행 프로젝트 )/참여자주도형 정보공유 시스템 [2011.12~2012.02] G711, payload type, PCMA, RTP, RTP PT

Ubuntu에 Mysql 설치.

2011/12/28 13:50

1. 우분투에서는 다음과 같이 입력하면 mysql 에 관련된 패키지를 검색하게 됩니다.

$sudo apt-cache search mysql

그중에서 필요한걸 골라서 설치하면 됩니다. (mysql 서버 데몬을 설치하는 경우 바로 2번 부터)


2. mysql 서버 설치


$sudo apt-get install mysql-server


3. mysql 클라이언트 설치


$sudo apt-get install mysql-client


4. mysql 서버 설치 직후 UTF-8 설정을 해줍니다
.
 해주지 않을 경우 latin1 로 character encoding 이 자동 설정되는데, 이걸 그대로 두면, 한글 처리할때 난관이 찾아올것입니다.

my.cnf 파일을 편집하기 위해 vi에디터로 해당 파일을 열어줍니다.

$sudo vi /etc/mysql/my.cnf

아래와 같은 내용을 추가해줍니다. [ ] 은 이미 my.cnf 에 있고 그 아래에 내용들을 추가.

 [client]
default-character-set=utf8

[mysqld]
character-set-client-handshake=FALSE
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8



5. mysql 을 재시작 해줍니다.

$sudo /etc/init.d/mysql restart


6. 변경 여부 확인은 다음과 같이.

$mysql -u id -p
mysql> status


 

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 Software Dev Note/Open Source Project my.cnf, MySQL, ubuntu, UTF-8, 설치, 우분투

  1. 유용하게 참고할 수 있을 것 같네요 ㅎ.ㅎ

Mean-Shift 와 CAMshift 알고리즘

2011/12/27 07:56


 

Mean-Shift CAMShift 알고리즘

많은 사람들이 이들 두 알고리즘이 색상 특징값을 기반으로 한다고 알고 있지만, 사실 이것들은 관심영역의 모든 특징값의 분포를 이용할 수 있는 알고리즘이다.

(1) Mean-Shift 알고리즘

Mean-Shift
알고리즘은 데이터 집합의 밀도분포(특징점,코너,색상)를 기반으로
관심영역(ROI) 객체를 고속으로 추적하는 알고리즘으로
초기의 검색 영역의 크기와 위치를 지정하면
반복되는 색 분할 계산에 의해서 색상 클러스터가 발생되고
초기 지정한 색 영역에 기반하여 경계를 결정하여 관심 물체를 추출할 수 있다고 한다.

이것은 mode seeking 알고리즘이라고도 하며,
특정 데이터들의 중심(mean)으로 이동(shift)하는 알고리즘이다.
이를 이용하여 데이터 분포의 mode 를 찾기도 하고, 트래킹도 한다.
(나는 트래킹을 목적으로 mean-shift 에 대해서 조사하였다.)

아래 링크는 mean-shift 를 구현해서 트래킹을 하는 몇가지 유튜브 영상이다.

http://www.youtube.com/watch?v=YbGrNZsS-Fw
http://www.youtube.com/watch?v=yIHzw9AmWnw&feature=related
http://www.youtube.com/watch?v=RG5uV_h50b0&feature=related

다음 그림을 보자.


위 그림을 살펴보면,
하늘색원은 임의로 선택된 범위(Region of Interest, ROI, 관심영역)이고,
흩어져 있는 빨간점들은 특징점 혹은 특정값이라고 할수 있다.

1) 임의로 하늘색원으로 된 선택된 범위(ROI,관심영역)를 잡고
2) 선택된 범위 안에 들어있는 특징점들의 밀도가 가장 큰 곳을 찾는다.
3) 밀도가 가장 큰곳을 중심으로 재설정한다
4) 재설정된 중심을 기준으로 임의의 범위를 다시 잡는다.

1)~4)을 다시금 반복하는데 이렇게 반복하면 전체에서 가장밀도가 많은 부분에서 맴돌고 있게 된다.
이렇게 전체영역에서 특정한 고밀도 부분, 혹은 저밀도 부분을 찾는 알고리즘이다.

어떤 특징점 or 특정값을 찾을것인지, 그리고 고밀도 or 저밀도 부분을 찾을것인지는 코딩 하기 나름이다.
(보통 mean-shift 예제가 색상값을 특정값으로 하여 물체를 추적하기 때문에 mean-shift는 색상 추적 알고리즘이라는 오해가 있는 것 같다.)



앞에서의 설명을 기반으로 하는 동작은 위의 애니메이션과 같다.
여기서 mean-shift의 한계를 알수 있는데, 간단히 살펴봐도 아래에 더 많은 밀도가 있는데 관심영역 window는 중심에 머무르는 모습이 보인다.



(2) CAMShift 알고리즘(Continuously Adaptive Mean-Shift)
CAMSHift ( Continuously Adaptive Mean Shift Algorithm ) 알고리즘은
Color Segment 방법의 MeanShift 알고리즘을 Streaming(효과,추적) 환경에서 사용하기 위해 개선한 것으로
탐색윈도우의 크기를 스스로 조정하는 기법을 사용하여 Mean-shift의 답점을 보강한다.

객체를 고속으로 추적하는데 사용되며 조도변화, 잡음이 많은 배경에서는 성능이 좋지않은 특징이 있다.

검출된 객체의 영역의 Hue 값의 분포를 이용하여 변화될 위치를 예측하고 탐지한 후
중심을 찾아 객체를 추적하게 된다.

이름에서 알수 있듯이 '연속적인 적응성 평균이동 알고리즘'이므로
mean-shift 를 사용하며 탐색윈도우 크기를 스스로 조정한다는 것이다.

CAMSHIFT 는 널리 알려진 meanshift algorithm의 변형으로 임의의 물체를 추출하기 위해
경험적 분포 (empirical distribution)에서 동작하는 탐색 알고리즘이다.

아래 링크의 유튜브 영상은 캠시프트로 실시간 트래킹 하는 영상이다.
http://www.youtube.com/watch?v=iBOlbs8i7Og
http://www.youtube.com/watch?v=brCMBymdxv4&feature=related


영상에서 조도의 변화는 휘도에 가장크게 나타난다.
따라서 상대적으로 Hue 값을 사용하면 조명의 영향에 덜 민감하므로 Hue값을 사용한다.
CAMShift의 알고리즘 동작은 아래와 같다


1) 관심영역(ROI)이 주어지면 HSV 색 모델의 Hue값으로 변환한다.
2) ROI에서 1차원 histogram을 구축하여 저장하고 추적 모델로 사용한다.
3) ?

영상 내에서 여러 개의 윈도우를 설정한다.
각 윈도우의 크기 및 중심점의 위치를 반복적으로 변화시키느데, 이때 윈도우 중심점의 위치는 윈도우 내에 분류된 화소값들의 평균이 되며,

크기는 화소 값들의 합에 비례해 증가한다.

이 과정을 모든 윈도우가 수렴할 때 까지 반복하는데, 윈도우의 수렴여부는 윈도우의 위치와 크기의 변화량에 의해서 결정된다.

즉 변경된 윈도우의 위치와 크기가 이전값과 차이가 없을 때 해당 윈도우는 수렴하게 된다.
영역내의 모든 윈도우가 수렴하면, 최대 윈도우를 출력하는데 실패판정은 다양하다.
예를들면 윈도우의 크기가 30´30 이하인 경우에는 물체영역추출이 실패한 것으로 간주하는등의 방법같이...

물체영역을 추출하기 위해서 CAHSMIFT 는 탐색 윈도우를 설정하고 윈도우 내에 존재하는 화소들의 분류결과에 따라서 윈도우의 크기와 위치를 반복적으로 변화시키며 탐색이 종료되면 최종 윈도우를 물체영역으로 결정한다.

CAMSHIFT는 경사 상승 (gradient ascent)알고리즘으로 부분적 최적해에 수렴될 수 있는데
이를 극복하기 위해 입력 영상내에 여러 개의 윈도우를 설정하는 방법을 사용하기도 한다.
CAMSHIFT 는 지역적으로 window 를 조절하며 동작하므로 모든 영상의 화소를 분류할 필요가 없이
각 window 내의 화소들만 분류하면 된다는 잇점이 있다.

CAMSHIFT가 수렴한 후의 윈도우는
배경부분에 위치한 윈도우의 경우 크기가 변하지 않거나 줄어든 반면, 탐색물체부분에 위치한 윈도우는
크기와 위치가 물체영역을 포함하도록 바뀐 것을 볼 수 있다.

 CamShift 예제는 OpenCV 를 설치하면 Sample로 주어진다. (sample 폴더에 camshiftdemo.c 가 있을것이다.)

처음에 관심영역(ROI)이 주어지면 HSV 색 모델의 Hue값으로 변환한다.
이를 바탕으로 1D histogram을 구축한다.
이 저장된 Histogram은 얼굴 추적 모델로 사용된다.
2D 영상 확률분포에 대해 가 좌표에서의 분포 확률값을 나타낼 때 CAMShift 알고리즘은 다음과 같이 동작한다.

1. 초기에 탐색창(search window)의 크기를 정하고, 탐색창을 초기 중심점(mean location)의 중앙에 오도록 위치시킨다.

2. 새로운 중심점(mean location)은 다음의 알고리즘으로 구해진다.
즉, 먼저 0차 Moment를 구한다.
또, x와 y에 대한 1차 moment를 각각 구한다
이때, 새로운 탐색창의 중심점(mean location)의 좌표도 구한다.

3. 새로운 탐색창에 대하여 위의 과정을 MeanShift 알고리즘이 수렴할 때까지 반복한다.


아래는 캠시프트 기반 색추적 예제 프로그램.

CamShift 알고리즘을 사용하여 색을 추적하는 프로그램입니다.

소스코드 다운로드, 코드 설명
- 실행동영상

http://www.youtube.com/watch?v=6rcTz1IuPGw&feature=player_embedded

 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 Software Dev Note/영상처리 camshift, mean-shift, 객체 추적, 민시프트, 색추적, 영상처리, 추적, 캠시프트

  1. Blog Icon
    장인태

    안녕하세요 ^^ 블로그 잘보고 갑니다. 논문쓰는데 이내용을 참고 하였습니다. 혹시 이내용의 출처를 알수 있을까요?

  2. Blog Icon

    비밀댓글입니다

  3. 좋은 내용 잘 보았습니다.

    제 카페로 좀 요약해서 퍼갔습니다. 그래도 되겠죠? ㅎㅎ

  4. Blog Icon

    비밀댓글입니다

  5. 이 포스팅은 mean shift와 cam shift 알고리즘의 설명입니다. 이와 관련하여 제가 작성한 소스코드는없습니다. opencv example에 존재하는 코드를 찾아보시면 쉽게 찾을 수 있을 것 같네요.

  6. Blog Icon
    도경

    안녕하세요 과제 중에 mean-shift 알고리즘이 나와서 찾아보다가 들어왔어요. 좋은 글 감사합니다. 이해가 엄청 빨리 됐어요 >.< 복 받으세요~~

  7. Blog Icon
    제갈현

    안녕하세요. 좋은 정보 감사합니다.
    한가지 여쭤보고싶은건 소스코드 다운로드에 링크되있는 홈페이지를 들어가니 이상한 사업창 같은게 뜨더군요. 구입 등의 버튼이 보이던데 소스코드는 구매를 해야되는건가요?

2012년 다이어리

2011/12/24 02:34
2011년 12월 GQ를 구입 하고 부록으로 받은 2012년 다이어리!
사실 GQ를 사고싶어서 산게 아니라, 다이어리를 받으려고 GQ를 산 것이다.
'2012년에는 꼭 다이어리를 끝까지 다 써봐야 겠다.' 라는 다짐을 하면서 잡지를 샀다.
(물론 2012년에 지구 종말이 오지 않는다는 가정이 깔려있다.)

주황색 다이어리는 여자친구의 2012년 다이어리.
싱글즈 12월 호를 구입하고 받은것 이라고 한다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 = ( Review ) 2012년 다이어리, GQ 12월호, GQ 부록, 다이어리, 부록, 싱글즈 12월호

  1. 주황색 다이어리 너무 예쁘네요.

  2. 그치요, 정말 예쁘죠? ^^

[Java] 정규표현식 표현 방법

2011/12/19 19:45

java.util.regex 패키지에 있는 Match 클래스와 Pattern 클래스를 사용하여 문자열을 정규표현식으로 검증할 수 있다.

boolean bln = Pattern.matches("^[a-zA-Z0-9]*$", this.input);


정규표현식은 다음과 같은 문법으로 되어 있다.

 ^ : 문자열의 시작을 나타냄.

$ : 문자열의 종료를 나타냄. \

. : 임의의 한 문자를 나타냄. (문자의 종류는 가리지 않는다)

| : or를 나타냄.

? : 앞 문자가 없거나 하나있음을 나타냄.

+ : 앞 문자가 하나 이상임을 나타냄.

* : 앞 문자가 없을 수도 무한정 많을 수도 있음을 나타냄. 
 만약, .* 으로 정규식이 시작한다면 시작하는 문자열과 같은 문자열이 뒤에 없거나 많을 수도 있는 경우에만 일치를 시킨다. 즉, abc 일 경우 시작문자인 a를 기준으로 a가 없을경우와 a가 무한정 많은 경우에도 true를 반환하기 때문에 abc의 경우는 true를 반환한다.

[] : 문자 클래스를 지정할 때 사용한다. 문자의 집합이나 범위를 나타내면 두 문자 사이는 '-' 기호로 범위를 나타낸다. []내에서 ^ 가 선행하여 나타나면 not 를 나타낸다.

{} : 선행문자가 나타나는 횟수 또는 범위를 나타낸다.
a{3} 인 경우 a가 3번 반복된 경우를 말하며, a{3,}이면 a가 3번 이상 반복인 경우를 말한다. 또한 a{3,5}인 경우 a가 3번 이상 5번 이하 반복된 경우를 나타낸다.

\w : 알파벳이나 숫자
\W : 알파벳이나 숫자를 제외한 문자
\d : 숫자 [0-9]와 동일
\D : 숫자를 제외한 모든 문자

위의 내용을 활용하여 다음 몇가지 예제를 만들어 볼 수 있다.

- 기본적인 문자열 검증 정규식
^[0-9]*$  :  숫자만
^[a-zA-Z]*$  :  영문자만
^[가-힣]*$  :  한글만
^[a-zA-Z0-9]*$  :  영어/숫자만

- 정규식 표현 예제

이메일 : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$  or  ^[_0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[_0-9a-zA-Z-]+)*$

휴대폰 :  ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

일반전화 : ^\d{2,3} - \d{3,4} - \d{4}$

주민등록번호 : \d{6} \- [1-4]\d{6}

IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 Software Dev Note/자바 Java, regex, Regular Expression, 자바, 정규식, 정규표현식

Register Allocation

2011/12/17 17:29

Register Allocation은 virtual register를 physical register에 대응시키는 과정입니다.

이 과정에는 두가지 과정이 필요한데, 첫째는 interference graph, 둘째는 register coloring입니다.


어떤 두 register가 동시에 live하면 같은 physical register를 할당할 수 없습니다. 그리고 이런 상태를 두 register가 interfere한다고 표현하죠. 이렇게 register를 graph의 vertex로, interfere하는 두 register를 edge로 연결하여 표현하는 graph를 interference graph라고 합니다. 이것은 liveness analysis를 통해서 구해낼 수 있습니다.


register coloring은, 말 그대로 m개의 area(vertex, virtual register)에 k개의 color(physical register)를 대응시키는 과정입니다. 당연히 인접한(interfere하는) 두 area에는 같은 색을 칠해서는 안되겠죠. 만일 이것이 불가능하다면 spill을 해야만 하는데, 그렇게 되면 앞서 설명 드렸듯이 overhead가 발생해서 프로그램이 느려지게 되겠죠.


이 문제는 NP problem이므로 practical한 시간 안에 최선의 해를 구할 수가 없습니다. 다만, 근사한 해를 구하는 알고리즘을 이번에 설명드리려 합니다.

첫번째는 Chaitin's Algorithm입니다. 이 algorithm은 다음과 같은 순서로 진행됩니다.

1. Degree < k(the number of color)인 vertex를 찾아서 stack에 push한다. 그리고 이 vertex는 graph에서 삭제한다.

2. 만일 이것이 불가능하면, Degree가 최대인 vertex를 찾아서 graph에서 삭제하고 stack에 push한다. 이 때, 이 vertex는 spill 마커를 표시한다.

3. 1,2의 과정을 graph가 빌 때 까지 반복한다.

4. stack이 빌 때 까지 pop하며 색을 칠한다. 이 때, spill 마커가 표시된 vertex는 색을 칠하지 않는다.


하지만 이 algorithm은 항상 좋은 해를 내어놓지는 않습니다.
대표적인 예가 아래와 같은 경우가 있을 것입니다.


이 경우에는 chaitin's algorithm은 하나의 register를 spill하게 되겠죠. 하지만 실제로는 아래와 같은 해가 존재합니다.

이런 케이스를 위해 Chaitin's algorithm을 Briggs가 개선한 것이 바로 Chaitin-Briggs' algorithm입니다.

이 알고리즘은 간단한데, spill 마커를 가진 vertex 가 존재하더라도 색칠이 가능하다면 색칠을 해주는 것 뿐이니까요. 그렇게 함으로써 위와 같은 문제도 좀더 최선에 가까운 해를 구할 수 있게 됩니다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Software Dev Note > 컴파일러' 카테고리의 다른 글

ASLR : Address space layout randomization  (0) 2014/12/04
Register Allocation  (0) 2011/12/17

Dev고양이 Software Dev Note/컴파일러 chaitin's algorithm, Compiler, register allocation, 레지스터 할당, 컴파일러

Function Calling Conventions

2011/12/17 05:22


함수 호출 규약(Function Calling Convention)에 대하여 정리해 보자.

일단 Microsoft의 Calling Convention의 종류는 다음과 같다


Calling Convention Argument Passing Stack Maintenance Name Decoration (C only) Notes
__cdecl Right to left. Calling function pops arguments from the stack. Underscore prefixed to function names. Ex: _Foo. This is the default calling convention for C/C++
__stdcall Right to left. Called function pops its own arguments from the stack. Underscore prefixed to function name, @ appended followed by the number of decimal bytes in the argument list. Ex: _Foo@10. This is the almost system calling convention.
__fastcall First two DWORD arguments are passed in ECX and EDX, the rest are passed right to left. Called function pops its own arguments from the stack. A @ is prefixed to the name, @ appended followed by the number of decimal bytes in the argument list. Ex: @Foo@10. Only applies to Intel CPUs. This is the default calling convention for Borland Delphi compilers.
thiscall this pointer put in ECX, arguments passed right to left. Calling function pops arguments from the stack. None. Used automatically by C++ code.
Used by Com
naked Right to left. Calling function pops arguments from the stack. None. Used by VxDs.
Used by Custom Prolog and Epilog

1. __cdecl
  • 인자 파싱 : Right -> Left
  • 스택 관리 : Caller, 가변 인자 허용
  • Name Mangling : 함수 이름 앞에 _추가
    ex) _Foo
  • C와 C++ 함수의 기본 호출 규약
  • 기본 호출 규약이므로 /Gz(stdcall) 또는 /Gr(fastcall) 옵션이 켜졌을 때, 필요한 변수나 함수 이름 앞에 __cdecl을 놓으면 된다.
    /Gd 옵션은 강제로 _cdecl 규약으로 호출한다.

 

2. __stdcall

  • 인자 파싱 : Right -> Left
  • 스택 관리 : Calle
  • Name Mangling : 함수 이름 앞에 _추가, 함수 이름 뒤에 @추가 되고 @뒤에 다시 매개변수의 전체바이트에 해당하는 10진수가 추가된다.
    ex) _Foo@12
  • 거의 모든 시스템 함수에서 사용되는 호출 규칙이다.( WinAPI )
  • /Gz 옵션은 C++멤버 함수와 __cdecl 또는 __fastcall이 표시된 함수를 제외한 모든 함수에 __stdcall 호출 규칙을 지정한다. 모든 __stdcall함수는 프로토타입을 가져야 한다. 가변 인수를 취하는 함수는 __cdecl로 표시해야 한다.

 

3. __fastcall

  • 인자 파싱 : 처음 2개의 DWORD 또는 더 작은 인자들은 ecx와 edx에 전달, 나머지 인자들은 Right-> Left
  • 스택 관리 : Callee.
  • Name Mangling : 함수 이름 앞과 끝에 @가 추가되고 @뒤에 매개변수의 전체바이트에 해당하는 10진수가 추가된다.
    ex) @Foo@12
  • /Gr 옵션은 선언된 함수가 충돌하지 않고 이름이 main이 아니라면, 모듈 내 각 함수를 fastcall로 컴파일 한다.

 

4. thiscall

  • 인자 파싱 : Right -> Left, this 매개 변수가 ecx레지스터에 전달.
  • 스택 관리 : Caller.
  • Name Mangling : 없음.
  • 가변인자를 허용하지 않는 C++멤버함수의 기본 호출 규약으로 스택 끝에 this포인터를 넣으며 컴파일시 컴파일러에 의해 가변인자 함수는 __cdecl로 변경된다. thiscall은 키워드가 아니므로 thiscall 호출 규약은 명시적으로 사용할 수 없다. 모든 매개 변수들은 스택상에 놓여진다.

 

5.naked

  • 인자 파싱 : Right -> Left
  • 스택 관리 : Caller
  • Name Mangling : 없음
  • stack frame이 생략.
  • 컴파일러가 기본적으로 만들어주는 Prolog와 Epilog를 변경할 때 사용된다. naekd를 사용하게 되면 아래와 같은 Prolog와 Epilog를 컴파일러가 생성하지 않는다. 사용자가 stack frame을 할당하여 사용해야 된다. 이는 CPU와의 이식성이 없기때문에 일반 응용프로그램에서는 거의 사용되지 않는다. 주로 디바이스 드라이버를 만들 때 사용한다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Software Dev Note > C / C++ / MFC' 카테고리의 다른 글

[STL] Vector 사용 예제  (0) 2012/06/03
[MFC] 공부중  (0) 2012/06/02
Function Calling Conventions  (0) 2011/12/17
[C] 저수준 파일 입출력  (0) 2011/10/03
구조체 패딩 비트에 대해서. struct padding bit  (0) 2011/08/20
[MFC] 알아두면 유용한 형변환  (0) 2011/06/30

Dev고양이 Software Dev Note/C / C++ / MFC calling convention, winapi, 컬링컨벤션, 콜링컨벤션, 함수 호출 규약

삼성 소프트웨어 멤버십 2012 상반기 신입회원 모집!

2011/12/16 17:09
삼성 소프트웨어 멤버십에서 2012년 상반기 신입회원 모집한다고 합니다! 전공 불문하고 IT 분야에 열정을 가지고있는 대학생, 대학원생을 신입회원으로 모집하고 있네요!! 회원활동 후 수료시 삼성전자 연구원으로 입사 할 수 있는 특전이 있다고 하는데, 도전해 볼만 하지 않나요?!



[삼성전자 소프트웨어멤버십 회원 선발 공고]

삼성소프트웨어멤버십에서 2012년도 상반기 신입회원을 선발 합니다.

1. 모집 요강
  □ 모집대상 : IT분야 연구개발에 ‘재능’과 ‘열정’있는 국내 정규 4년제 대학(원)생
  □ 해당지역 : 서울, 수원, 대전, 대구, 부산, 광주, 전주
  □ 접수방법 : 온라인 접수( www.secmem.org )
  □ 모집일정
    * 서류접수 : 2011.12.14 ~ 12.28 16:00 까지
    * 기술면접 : 2012. 1.10 ~ 2012. 1.13 예정 (추후 홈페이지 공지)
    * 합격자 발표 : 2012년 1월 말 예정

2. 지원 분야
  □ 기   술 : Software , Hardware, SoC, Robotics, Etc.
  □ Contents : Mobile Application, Mobile Widget, Mobile/Web Based Contents, Etc.
  □ UX : Information Architecture, User Research, UX Strategy, Auditory UI, 인간공학, Etc.
    * Contents, UX 분야는 서울/수원 지역에 한해 소수 선발 함
    * Contents 분야는 OCEAN(삼성 앱 개발센터)에서 활동 함
    * UX분야 AUI 신설 : Sound Design, Voice UI 등 Auditory UI 관련 전공자 신규 모집
    * 상기 관련 분야에 대해 본인이 직접(공동) 개발한 작품 시연 및 발표

3. 지원 자격
  □ IT 연구개발에 재능과 열정이 있는 자
  □ 정규 4년제 대학(원)생 (1~4학년, 석사)
  □ 전공 학과 불문
  □ 국내외 공모전 수상자 우대
  □ 대학 졸업 전 1년 이상 회원 활동이 가능한 자(대학 졸업과 동시에 수료)
    * Contents 분야는 1년 6개월 이상
    * UX 분야 학사 재학 중인 회원은 2년 이상, 석사 재학 중인 회원은 1년 이상

4. 선발 인원 : 약 ○○○명

5. 회원 혜택
  □ 연구개발 활동 및 환경 지원
  □ 회원 활동 수료 시 삼성전자 연구개발직 입사특전 부여
    ※ 보다 자세한 사항은 홈페이지( www.secmem.org ) 및 각 학교 취업경력개발센터와
       IT관련 학과 사무실에 비치되어 있는 홍보책자를 참조하세요.


[삼성소프트웨어멤버십은?]
삼성전자에서 대학생을 지원하는 IT 인재양성 기관이며,
IT분야에 열정과 재능을 가진 학생들의 연구개발 환경을 제공 합니다.
1년 이상의 활동과 평가를 거쳐 프로그램 수료 시 삼성전자 입사특전이 주어집니다.

▷▶▷삼성소프트웨어멤버십 홈페이지 바로가기
▷▶▷삼성소프트웨어멤버십 블로그 바로가기
▷▶▷삼성소프트웨어멤버십 트위터 바로가기
▷▶▷삼성소프트웨어멤버십 페이스북 바로가기






저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 = ( Review ) 2012년 상반기 신입회원, SSM, 삼성 소프트웨어 멤버십, 삼성전자, 소멤, 신입회원 모집

안드로이드 GPS 상태체크

2011/12/04 18:39

지도를 비롯 위치정보를 이용한 서비스 개발시 유용한 팁.
 
GPS 연결여부를 체크 : 미연결시 연결설정 화면으로 이동 하겠는가? 다이얼로그 출력. 

다이얼로그로 부터 '수락' 입력받을 경우 GPS 설정 화면으로 이동.

 아래는 그 기능의 예제코드


@Override
     public void onCreate(Bundle savedInstanceState) {
         ...
         String context = Context.LOCATION_SERVICE;
         locationManager = (LocationManager)getSystemService(context);
         if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            alertCheckGPS();
      }
         ...
     }
 
    private void alertCheckGPS() {
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         builder.setMessage("Your GPS is disabled! Would you like to enable it?")
                 .setCancelable(false)
                 .setPositiveButton("Enable GPS",
                         new DialogInterface.OnClickListener() {
                             public void onClick(DialogInterface dialog, int id) {
                                 moveConfigGPS();
                             }
                     })
                 .setNegativeButton("Do nothing",
                         new DialogInterface.OnClickListener() {
                             public void onClick(DialogInterface dialog, int id) {
                                 dialog.cancel();
                             }
                     });
         AlertDialog alert = builder.create();
         alert.show();
     }
 
    // GPS 설정화면으로 이동
     private void moveConfigGPS() {
         Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
         startActivity(gpsOptionsIntent);
     }
 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 Android Dev Note/센서 GPS, GPS설정 이동, GPS세팅, 상태체크, 설정, 안드로이드

자료조사(8) - RTP (real Time Procotol)

2011/11/27 20:05

RTP(Real Time Protocol)

>> RFC 3550


☛ 개요

RTP는 오디오, 비디오 및 시뮬레이션 데이터와 같은 실시간 데이터를 멀티캐스트 또는 유니캐스트 네트웍을 이용해서 전송하는 응용 서비스에 알맞은 단말-대-단말 네트웍 전송 기능을 제공한다.  RTP는 자원 예약을 수행하지 않으며, 따라서 적시 전달, 순차 전달과 같은 서비스 품질도 보장하지 않는다. RTP 데이터 전송 기능은 제어 프로토콜에 의해 확장되는데, RTCP라 불리우는 이 제어 프로토콜은 데이터의 전달 상황을 감시하며, 최소한의 제어 기능과 매체 식별 기능을 제공한다. RTP와 RTCP는 하위의 전송 및 네트웍 계층에 무관하게 설계되었다.
   RTP는 별개의 독립 계층으로 구현되기 보다는 특정 응용에서 요구되는 정보를 제공하여 프로토콜의 처리가 응용의 처리 과정으로 통합될 수 있도록 설계되었다. 따라서 기존의 프로토콜들과는 달리 RTP는 응용의 필요에 따라 헤더를 변경하거나 추가하여 응용에 맞는 프로토콜이 될 수 있도록 하는 일종의 맞춤형 프로토콜이다. 이 문서에서는 RTP를 이용할 수 있을 것으로 추정되는 모든 응용들이 공통적으로 필요로 할 기능들 만을 명시하고 있다. 따라서, 특정 응용 서비스에 필요한 RTP를 구현하기 위해서는 이 문서 이외에 RTP 페이로드의 종류와 형식을 정의하는 프로파일 문서(Profile Specification)와 페이로드의 전송 방법을 정의한 페이로드 형식 문서(Payload Format Specification)가 필요하다.

☛ 특징
- UDP상에서 실행
  UDP는 TCP에 비해 신뢰성이 낮은 반면, 더 빠르게 데이터를 전달함. 이러한 UDP의 특성을 이용하여 RTP가 등장하였다. 그래서, RTP는 그 자체로 QoS 보장이나 신뢰성을 제공하지 못한다.(RTCP를 통해 QoS를 보장)
- 송신자는 데이터 단위를 RTP 패킷으로 캡슐화한 후 그 패킷을 UDP 세그먼트로 캡슐화해서 IP에게 넘겨준다.
- RTP 세션 다중화
   효과적인 프로토콜 처리를 위해서 다중화 점의 수는 최소화되어져야 한다. RTP의 경우에 다중화는 목적지 전송 주소에 의해 수행된다.. 예를 들어 오디오와 비디오로 이루어지는 회의에서 각 매체는 자신만의 목적지 전송 주소를 가지는 독자의 RTP 세션으로 전송되어야 한다.
- 수신자는 UDP 세그먼트로부터 RTP 패킷을 추출한 후에 RTP 패킷으로부터 데이터 단위를 추출해서 디코딩 및 렌더링을 위해 미디어 플레이어에게 전달한다.
- RTP는 다른 3계층, 4계층 프로토콜과도 같이 사용이 가능하며,
  하위 프로토콜에 별로 의존하지 않음.

☛ RTP 패킷헤더 필드
 


-부하타입, 순서번호, 타임스탬프, 근원지식별자 필드가 있다.
1. 페이로드타입필드의 길이는 7비트이다. 오디오 스트림의 경우, 사용되는 오디오 인코딩타입을 타나내기 위해 사용한다. 만일 송신자가 세션 중간에 인코딩을 변경하면, 송신자는 수신자에게 페이로드 타입 필드를 사용해서 이 변경사항을 알려준다. 예컨대, 송신자는 오디오 품질을 향상시키거나 RTP스트림 비트율을 감소시키기 위해 인코딩을 변경하고자 할 수도 있다.
표 RTP에서 제공하는 오디오 페이로드 타입

 

페이로드 타입 번호
오디오 포맷
샘플링 비율
비율
0
PCM μ-law
8 kHz
64 kbps
1
1016
8 kHz
4.8 kbps
3
GSM
8 kHz
13 kbps
7
LPC
8 kHz
2.4 kbps
9
G.722
16 kHz
48-64 kbps
14
MPEG 오디오
90 kHz
-
15
G.728
8 kHz
16 kbps
   비디오 스트림의 경우에 페이로드 타입은 비디오 인코딩 타입을 나타내기 위해 사용된다. 이 때도 송신자    는 세션 중에 비디오 인코딩을 변경할 수 있다.
표 RTP에서 제공하는 비디오 페이로드 타입
페이로드 타입 번호
비디오 포맷
26
Motion JPEG
31
H.261
32
MPEG 1 비디오
33
MPEG 2 비디오
2. 순서번호필드의 길이는 16비트이다. 순서번호는 전송되는 RTP 패킷마다 하나씩 증가하며, 패킷 손실을 감지하고 패킷 순서를 회복하기 위해 수신자가 사용할 수 있다. 예를 들어, 만일 애플리케이션의 수신자가 순서번호 86과 89사이에 공백이 있는 RTP패킷 스트림을 수신하면, 수신자는 패킷 87과 88을 잃어버렸음을 알게 된다. 그러면 수신자는 손실된 데이터를 막기l 위해 시도할 수 있다.
3. 타임스탬프 필드의 길이는 32비트 이다. 이 필드는 RTP 데이터 패킷의 첫 번째 바이트의 샘플링 시점을 나타낸다. 수신자는 네트워크에 의해 만들어진 패킷 지터를 제거하고 수신자가 동기적인 재생을 가능하도록 타임스탬프를 사용할 수도 있다. 타임스탬프는 송신자 샘플링 클록으로부터 생성된다. 예를 들어, 오디오의 경우에는 타임스탬프의 클록은 각 샘플링 주기마다 하나 증가한다. 만일 오디오 애플리케이션이 160개의 인코딩된 샘플로 구성된 chunk를 생성한다면, 근원지가 활성일 때 타임스탬프는 각 RTP 세션마다 160씩 증가한다. 타임스탬프 클록은 근원지가 비활성일 때 조차도 일정 비율로 계속 증가한다.

 
그림 RTP layer

4. 동기근원지 식별자(SSRC): SSRC 필드의 길이는 32비트 이다. 이 필드는 RTP 스트림의 근원지를 식별한다, 대개, RTP 세션의 각 스트림은 상이한 SSRC를 갖는다. SSRC는 송신자의 IP 주소 대신에 새로운 스트림이 시작될 때 근원지에서 임의 할당한 숫자이다. 두 스트림이 동일한 SSRC를 할당받을 확률은 매우 작다. 만일 이런 일이 발생하면 두 근원지는 새로운 SSRC 값을 선택한다.



RTP로 소프트웨어 애플리케이션 개발방법
1. 애플리케이션 개발자가 RTP 캡슐화를 수행하는 송신자의 코드와 RTP 패킷을 풀어보는 수신자의 코드를 직접 작성해서 RTP를 추가하는 것.
2. 캡슐화 및 역캡슐화를 수행하는 기존 RTP 라이브러리와 자바 클래스들을 애플리케이션 개발자가 사용하는 것이다.

   예를들어, 음성을 전달하기 위해 RTP를 사용하는 것에 대해 생각해보자. 음성 데이터는 64kpbs의 PCM으로 인코딩된다고 가정하자. 또한 애플리케이션이 인코딩된 데이터를 20밀리초의 데이터 단위(즉, 한 데이터 단위에 160바이트)로 모은다고 가정하자. 송신자는 오디오 데이터의 각 데이터 단위 앞에 오디오 인코딩 종류, 순서번호, 타임스탬프 등을 가진 RTP 헤더를 덧붙인다. RTP 헤더는 보통 12바이트이다. 오디오 데이터 단위에 RTP 헤더를 덧붙여서 RTP 패킷을 구성한 후, UDP 소켓 인터페이스로 전송한다. 수신자의 애플리케이션은 소켓 인터페이스에서 RTP 패킷을 수신한 후, RTP 패킷에서 오디오 데이터 단위를 추출하고, 추출된 RTP 패킷의 헤더 필드를 살핀 후에 오디오 데이터 단위를 적절히 디코드 및 재생한다.
        페이로드 타입이나 순서번호, 타임스탬프를 제공하는 개인 기법 대신에, 애플리케이션이 RTP를 사용하면 훨씬 쉽게 다른 네트워킹 멀티미디어 애플리케이션을 통합할 수 있다. 예를 들어. 만일 두 회사에서 인터넷 폰 애플리케이션을 개발할 때 RTP를 사용한다면, 한 회사의 인터넷 폰 제품을 사용하는 사용자가 다른 회사의 인터넷 폰 제품을 사용하는 사용자와 통신 가능할 거라고 기대할 수 있다.
        RTP 자체가 시간에 맞춘 데이터 전달을 보장하거나 다른 서비스 품질 보장을 제공하는 기법을 지원하지 않는다는 것이다. 즉, RTP는 패킷 전달을 보장하거나 패킷 전달 순서를 보장하지 않는다. 실제로 RTP 캡슐화는 종단 시스템에서만 된다. 라우터는 RTP 패킷을 전달하는 IP 데이터그램과 RTP 패킷을 전달하지 않는 IP 데이터 그램을 구분하지 않는다.
        RTP는 각각의 근원지(예:마이크로폰, 카메라)에게 자신만의 RTP 패킷 스트림을 생성할 수 있도록 허용한다. 예를 들어, 두명의 참여자가 있는 화상회의의 경우, 두 개의 오디오 송신용 스트림(각 방향으로 하나의 스트림)과 두 개의 비디오 송신용 스트림(각 방향으로 하나의 스트림)등 총 네 개의 RTP 스트림이 만들어질 수 있다. 그러나 MPEG1이나 MPEG2 같은 대다수 많이 사용되는 인코딩 기법은 인코딩 과정에서 오디오와 비디오를 하나의 단일 스트림으로 합친다. 인코더에서 오디오와 비디오를 합치면 각 방향으로 하나의 스트림만 생성된다.
        RTP 패킷은 유니캐스트 애플리케이션에 한정되지 않는다. RTP 패킷은 일대다 EH는 다대다 멀티캐스트 트리로 전송될 수도 있다. 다대다 멀티캐스트 세션에 대해, 세션의 모든 송신자와 근원지는 RTP 스트림을 전송하는 데 있어서 일반적으로 동일한 멀티캐스트 그룹을 사용한다. 화상회의 애플리케이션에서 다수의 송신자들에 의해 전송되는 오디오, 비디오 스트림과 같이 함께 포함된 RTP 멀티캐스트 스트림들은 하나의 RTP 세션에 속하게 된다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 = ( 수행 프로젝트 )/참여자주도형 정보공유 시스템 [2011.12~2012.02] RTP, rtp 구현, 실시간 스트리밍, 영상 스트리밍, 음성 스트리밍, 음성 전송

리눅스 압축 명령/방법/종류

2011/11/27 15:57

리눅스에서 많이 사용되는 압축파일로는 tar, gz, bz2, zip 등이 있다. 이들 각각은 나름대로의 고유한 압축방식을 가지고 있으며, 압축해제하는 방법 또한 다양하다.

그래픽 유저 인터페이스(GUI) 모드에서 리눅스를 사용하는 사람이라면 간단히 더블클릭으로 압축 관리 프로그램을 실행하여 압축 및 해제를 할 수 있지만, 텍스트 모드를 사용하는 사용자라면 이들 압축파일을 사용할 수 있는 명령들을 숙지하고 있을 필요가 있다.

오늘은 이러한 압축 파일들을 생성하고 압축해제하는 방법에 대해 알아보도록 하자.

 

 

 tar

tar은 엄밀히 말해서 압축방식은 아니다. 

일종의 묶음 파일로 이해하는 것이 좋을듯.

이 tar과 gzip을 같이 사용하는 경우 tar.gz (또는 tgz)라는 확장자를 사용함.

tar 로 묶고 푸는 방법은 다음과 같음.

 


- 압축 생성

  # tar cvf temp.tar temp/

    ; temp 디렉터리를 temp.tar 이라는 파일로 묶는다.

     (temp 디렉터리와 그 이하의 모든 파일 및 디렉터리)

 


- 압축 해제

  # tar xvf temp.tar

 

 

 

※ 옵션설명

  -c : (create) 압축 파일을 생성한다.

  -x : (extract) 압축 파일을 해제한다.

  -v : 압축파일이 생성(해제)되는 과정을 보여준다.

  -f : 압축파일 또는 Archive 장치를 사용한다.

※ tar 명령에서 옵션 앞에 붙는 "-" 기호는 붙여도 되고, 붙이지 않아도 된다.

※ gzip과 같이 압축된 파일의 경우 (tar.gz 또는 tgz) -z 옵션을 사용하여 한번에 처리할 수 있다.

 

 

 

gzip (tar.gz 또는 tgz)

 

앞서 보았던 tar로 묶여진 파일을 다시 압축하는 방법으로 많이 사용되는 압축형태이다. gzip 명령으로 압축하고 gunzip 명령으로 압축을 해제한다.

 

- 압축 생성

  # gzip temp.tar

  위 명령을 사용하면 temp.tar.gz 이라는 파일이 생성된다.

 

- 압축 해제

  # gunzip temp.tar.gz

  # gzip -d temp.tar.gz

 

※ gzip 명령으로 압축을 해제하면, 그 전단계인 tar 묶음 형태로 압축이 풀리게 되므로 tar 명령으로 다시한번 묶음을 해제해야 한다.

최근에는 이러한 번거로운 과정을 줄이기 위해 tar 명령에서 tar 묶음 및 gzip 압축까지 모두 해제할 수 있는 옵션(-z)을 제공한다.

  # tar xzvf temp.tar.gz

 
 

 bzip2 (bz2)

gzip과 같이 최근 많이 사용되는 압축 형태로 tar.bz2 라는 확장자로 다루어진다.

역시 tar 묶음에 다시 압축을 가하는 형태이며, bzip2 전용 명령도 있으며, tar에서도 한번에 사용할 수 있는 옵션(-j)이 있다.

 

- 압축 생성

  # bzip2 -zkv temp.tar

 

- 압축 해제

  # bunzip2 temp.tar.bz2

 

※ bzip2 명령으로 압축을 해제하면, tar 명령을 다시 사용해야 하므로, 최근에는 tar에서 바로 해제하는 경우가 많다.

  # tar xjvf temp.tar.bz2



 zip

zip 파일은 Windows에서도 많이 사용되는 압축 형태로, 리눅스에서도 동일하게 사용할 수 있다.

 

- 압축 생성

  # zip -v temp.zip temp/*

    ; temp 디렉터리 이하의 모든 파일을 zip으로 압축한다.

 

- 압축 해제

  # unzip temp.zip

 

 

[Tip! Tip! Tip!]

리눅스에서는 Windows와 달리, 파일의 확장자에 큰 의미를 두지 않으므로, 압축파일 생성시 이름 및 확장자를 임의로 지정할 수도 있다.

그러나 사용자 간의 커뮤니케이션 및 인식의 통일을 위해 가급적 지정된 확장자를 사용하는 것이 좋다.

즉 압축파일 생성시 아래와 같은 일련의 규칙들을 준수해 줌으로써 쉽게 인식하고 혼란을 막아, 다른 사용자의 이해를 높일 수 있다.

 

[압축파일 확장자 명명 규칙]

- tar압축 : *.tar

- tar/gzip 압축 : *.tar.gz / *.tgz

- tar/bzip2 압축 : *.tar.bz2

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 Software Dev Note/Open Source Project bzip2, gzip, Linux, tar, ZIP, 리눅스, 명령, 압축, 종류

우분투 JDK 설치하기

2011/11/25 17:30
# JDK 설치하기
  우분투에 JDK 설치 관련으로 인터넷을 뒤져보면 apt-get (sun-java...) 이나 시냅틱 패키지 관리자 ( openjdk-... )로 설치가 된다고들 
  하던데... 난 안되더라~ " ...설치할 수 있는 후보가 없습니다." 라는 친절한 응답만 받았다. 그리고 rpm, deb 패키지들도 뭔 의존성이 
  어쩌고 저쩌고...

  에휴~ 그래서 그냥 tar 패키지 받아서 직접 경로에 설치해버렸다. 아래 주소에 가면 x86용 tar 패키지를 받을 수 있을 것이다.

  http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html

@ 설치 환경

  - Ubuntu linux 10.04 LTS 2.6.32.34-generic
  - jdk-7-linux-i586.tar.gz

@ 설치 

$ sudo mkdir /usr/local/java                                                  # java 디렉토리 생성은 선택사항.
$ cd /usr/local/java
$ sudo cp ~/Downlaod/jdk-7-linux-i586.tar.gz .
$ sudo tar zxf jdk-7-linux-i586.tar.gz                                        # 압축이 풀리면 아마 jdk1.7.0 이 생성될 것이다.
                                                                                     
@ 설정

 에디터로 자신의 홈디렉토리의 .bashrc 파일을 편집한다.

$ cd                                                                                 # 홈디렉토리 이동
$ vim .bashrc

   // .bashrc 추가 내용
   export JAVA_HOME=/usr/local/java/jdk1.7.0
   export PATH=$PATH:$JAVA_HOME/bin
   export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib

$ source .bashrc
$ javac -version                                                                  # 받은 JDK 버전에 맞게 나오면 설치 완료.
$ java -version                                                                    


@ 참고 사항 

  1. 작업 환경에 eclipes 혹은 Android 개발환경이 이미 설치되어있다면 설치한 java ( 1.7.0 ) 명령어가 아닌 다른 java ( 1.7.0 이외 버전 )
      명령이 실행될 수도 있다는 것을 알아두기 바란다.

  2. 위 설정은 개인 계정에만 적용되는 설정이다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 Software Dev Note/Open Source Project jdk, jdk설치, ubuntu, 우분투

  1. Blog Icon
    나그네

    감사합니다~

Ubuntu Vim 설치하기

2011/11/25 17:14
Ubuntu 를 처음 설치하면 일반 vi 에디터가 설치되어 있는데, 윈도우 텍스트 에디터에 익숙해진 나로써는
다소 사용하기가  불편했다.

그나마 윈도의 텍스트 에디터들과 유사하게 키입력을 먹는 Vim을 설치하기로 했다. 
또한 C코딩등의 작업을 편하게 하기위해 하이라이트 기능을 On시키기로 했다.

1. sudo apt-get install vim


2. 자신의 홈 디렉토리에 .vimrc 파일을 생성


set autoindent

set cindent

set smartindent

set nocompatible

set visualbell

set backspace=indent,eol,start

set history=50

set ruler

set showcmd

set incsearch

set tabstop=4

set shiftwidth=4

set number


if has("syntax")

syntax on

endif


잘 동작한다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Dev고양이 Software Dev Note/Open Source Project ubuntu, vim, vim설치, 우분투