2009년 10월 26일 월요일

자랑스런 타이거즈 선수들


오늘도 6시 30분이 되면 스포츠 채널을 습관처럼 돌려야 될것만 같다.ㅎㅎ
야구 시즌이 끝나고 나니깐 벌써 금단현상이 일어나는 것만 같다..

지난 주말 우리 타이거즈의 V10이 확정되는 순간 정말 마음 깊은 곳에서부터 끓어오르는 먼가가 있었다.
12년만에 페넌트레이스 1위를 확정지으며 한국시리즈에 진출한 기아타이거즈..

플레이오프를 거쳐오면서 지쳐있던 SK에 비해 상대적으로 쉽게 우승을 할수도 있을거라고 생각했지만
SK는 그렇게 녹녹한 팀이 아니었다..
광주 홈에서 2승, 인천 문학에서 2패에 이어 잠실에서 1승, 1패..그리고 마지막 7차전..
어쩌면 그래서 드라마보다 더 드라마틱했던 한국시리즈 7차전...

그날 평소 야구를 즐겨보지 않던 선배가 늦은 점심을 함께 하고자 집에 왔었다.
이미 오후 2시가 넘어 경기는 시작된 상황...

초반에 뒤지는 상황이었지만 집을 나서서 식당에 도착하기 전에 먼가 큰 이변이 날것만 같아서..
그냥 음식을 불러서 먹기를 종용했지만 그 선배두 고집이 상당해서 끝까지 나가서 먹잔다.ㅠㅠ

갈까말까 고민고민하면서 주저하다가 결국 5회을 넘기다 보니 분위기가 달라졌다..
처음부터 우리가 질거라는 생각은 전혀 하질 않았다..

그리고 드디어 타어거즈의 대반격이 시작되고 있었다..
결국 9회말 나지완의 끝내기 안타가 터지고 한국시리즈의 우승의 확정되는 순간까지 지켜봤다..
그리고 집과 가까운 식당에 가서 점심을 건너뛴 것도 못느끼고 기쁨의 술잔을 들었다....

아..이 맛이다...우승맛.ㅋㅋ

내년 군대에서 복귀하는 여러 명의 투수 덕분에 더욱더 강해질 기아의 불펜....
그에 걸맛는 타격으로 다시 한번 타어거즈의 전설을 써나가길 기대해 본다..

아래 글은 다음 스포츠 게시판에 제임스님이 쓰신 타이거즈 관련글

너무 감동이라 퍼왔다..ㅎㅎ


==========================================================================================

제임스님 : 만들기 힘들닷!! 자랑스런 타이거즈 선수들..

야구가..끝난지 고작 이틀 지났을 뿐인데....

무료하네요.....


다음시즌 까진 어찌 기다려야 하나....

이번시즌은 정말 꿈같은 시즌 이었습니다.....


다시 올려봅니다...타이거즈 선수들의 마무리...

시간이 촉박하여...많은 선수들이 빠졌지만...양해를 바랍니다...






















































아직도 ...믿기지가 않네요~~ㅎㅎ  꿈이라면 깨어나질 않길 바랍니다.....


내년 시즌도 화이팅!! 입니다...


사랑한다....타이거즈..!!

2009년 10월 24일 토요일

기아 타이거즈 V10. 너무 좋아 ㅋㅋ~~!!

2009년 10월 24일 토요일 오후 2시 한국시리즈 7차전..

초반부터 선발로 등장한 구톰슨 선수..구위가 좋지 않다.ㅠㅠ
4회에 2점...5회에 1점으로 내주고 간신히 1점으로 따라가서 5회말..3 대 1로 뒤지는 상황...
그러나 나는 믿고 싶었다...우리 타이거즈의 저력을...........

6회초 다시 2점으로 내줘서. 5 대 1..그러나 6회말 나지완의 투런 포로 다시 5 대 3..상황..
힘겹게 7회말 고졸신인 안치홍의 솔로포 등에 힘업어 5 대 5 동점 상황......

힘겹게 9회초까지 팽팽한 5 대 5의 동점 상황이 이어지다 마지막 9회말 마지막 이닝...
1아웃 상황에서 나지완의 극적인 솔로 홈런으로 기아타이거즈가 한국시리즈 우승........

눈물이 날 정도로 기쁘다.......12년만의 우승...조범현감독과 코칭스텝..
그리고 기아의 기둥인 종범신. 이대진..김종국......그리고 최희섭.김상현...그리고 신인 안치홍...

불안불안한 상황에서 끝까지 침착하게 역점 홈런포를 때린 나지완 선수에 대한 김석류 아나운서의 글이 다시 한번 내 마음을 울린다..

기아 타이거즈...사랑합니다.....당신들은 영원한 타이거즈입니다.......

=======================================================================================


시계를 10년 전으로 돌려보자.

1999년 소년체전 서울 예선전, 신일중 2학년 나지완이 타석에 들어섰다. 3-7로 몰린 6회초(정규이닝 7회) 2사 만루, 동료들의 간절한 눈빛이 그를 향했다. 마운드 위 잠신중 좌완투수 이용규의 마음은 달랐다. 그를 꼭 막아야 했다. 어깨에 잔뜩힘이 들어갔고, 제구가 잘못된 공은 나지완의 팔꿈치를 향했다.

나지완은 그 자리에서 쓰러졌다. 통증이 온 몸으로 번졌다. 10분쯤 흘렀을까. 나지완이 고통에 몸부림치는 사이, 일몰 서스펜디드 게임이 선언됐다. 곧바로 병원으로 달려간 나지완에게 의사는 "팔에 금이 갔다. 깁스를 해야한다"고 했다.

소년 나지완의 눈에 눈물이 고였다. 통증보다 경기에 뛸 수 없다는 것이 나지완을 괴롭게 했다. 하지만 때로는 정신이 육체를 지배한다. 당시의 나지완에게는 공과 배트가 '치료제'였다.

다음날, 경기 재개 한시간 전 나지완은 자신의 손으로 깁스를 풀었다. 꼭 뛰겠다는 의지였다. 나지완의 의욕은 기적을 잉태했다. 신일중은 7회 터진 끝내기 홈런으로 극적인 역전드라마를 완성했다.

드라마는 1편에서 막을 내리지 않았다. 잠신중과의 경기 종료 30분 뒤 신일중은 강남중과 경기를 치러야 했다. 투수가 소모된 상황, 나지완은 금이 간 팔꿈치를 부여잡고 마운드에 올랐다. 몇 번이고 이를 악물고 던졌다. 하늘은 그의 노력을 외면하지 않았다. 나지완의 역투 속에 신일중은 콜드게임승을 거뒀고, 결국 대회 우승을 차지했다. 이틀 동안 나지완은 부쩍 자랐다. 통증을 견뎌내는 법과 절망을 극복하는 법을 배웠다. 청소년대표에 선발되는 영광도 이어졌다.

'힘들다'는 생각이 들때면 나지완은 10년전을 떠올린다. 생애 첫 한국시리즈에 나서는 심정이 꼭 그때와 같다고 한다. 2008년 2차 1라운드로 KIA에 지명된 나지완은 '제2의 심정수'라는 찬사 속에 프로무대로 나섰다. 하지만 프로무대의 높은 벽에 막혔고, 1-2군을 오가는 신세가 됐다. 달갑지 않은 비판들이 나지완의 귀까지 들려왔다. 하지만 2년차의 나지완은 달랐다. 23홈런을 쳐내며 최희섭·김상현과 함께 KIA의 중심타선을 이뤘다. 그리고, 당당히 한국시리즈 엔트리에 이름을 올렸다.

아직 나지완의 한국시리즈 성적은 신통치 않다. 3차전까지 6타수 무안타. 혹시라도 나지완을 걱정하는 KIA팬이 있다면, "기다리시면 된다"고 말씀드리고 싶다. 이보다 더한 상황도 이겨냈던 나지완이니까.

김석류=KBS N스포츠 아나운서

2009년 10월 18일 일요일

GDB 기본 사용법

GDB 기본 사용법


gdb를 이용해 디버깅을 하기 위해서는... 컴파일 옵션에 -g 옵션을 붙여야 한다.


$gcc -g -o test test.c


-g 옵션을 붙이게 되면, 컴파일 되는 실행 파일에 여러 디버깅 정보가 삽입된다..

아무튼 이렇게 생성한 실행파일로 gdb디버깅을 시작해 보자.

프롬프트 창에서

 $gdb test

라고 입력한다.



프롬프트 변경


(gdb)set prompt haha:


이렇게 하면...(gdb)대신에 haha: 가 나오게 된다.

 

gdb 종료방법


(gdb) q



1. 소스보기

    명령어 : l (list)


그냥 단순히 프롬프트 창에서 l을 입력하면 된다.

리눅스에서와 마찬가지로..여기서도 tab키의 기능을 마음껏 사용할 수 있는데..축약 명령어보다 정확한 명령어를 사용하고 싶다면... l을 누르고 tab를 누르면 자동완성 기능이 사용된다.


l 명령은 기본적으로 10줄의 소스코드를 보여주는데.. 더 많이 보거나 적게 보기위해서는..

이렇게 하면 20줄씩 보게 되겠다..

또, 특정 줄이나 함수로 이동하고자 할 때는,..


l main

l 25

위와 같이 명령을 내리면 되겠다.

 

l file.c:func

또한 특정 파일의 func함수를 보고 싶다면...위와 같이 입력하면 된다.



1.5 프로그램 실행

    명령어 : r (run)

아까 순서에는 적지 않았지만... 브레이크 포인트 설명 전에 미리 언급해야 할 사항이다. 일단.. gdb를 실행하고 나면... 아직 디버깅할 준비만 된 것이지... 실제로 디버깅을 시작한 것은 아니다. r명령을 내림으로써 실제로 디버깅에 들어간다.

 

2. 브레이크 포인트

    명령어 : b (break)


이제 특정 부분에 브레이크를 거는 작업이다. 요것이 무엇인고...하니, 간략히 말하자면... 문제가 발생한 부분에 브레이크를 걸어, r명령으로 프로그램을 수행하면, 브레이크를 건 부분에서 프로그램이 멈추는 것을 볼 수 있다.

브레이크는 특정 라인에 걸거나 함수에 걸수 있다.


b 19

b main

b file.c:10

b -2

b 10 if tmp ==0


위와 같이 브레이크를 걸 수 있는데...

4번째 명령은 현재 행으로부터 2줄 이전에 브레이크를 거는 것이고,

마지막 명령은, 10행에 브레이크를 거는데...tmp라는 변수가 0일 때 작동한다는 의미이다.

어떤 상황에 맞게 브레이크를 걸게 할 수도 있고, 그냥 통과 시킬 수도 있는 기능은 매우 편리하기 때문에 자주 사용된다.


또한, 브레이크 포인트를 지울 수도 있는데...
cl (clear)명령어를 사용한다.

cl hello

cl 10

cl file.c:20

d


위에 나열한 명령어가 브레이크를 지우는 역할을 한다.

다른 것들은 말 안해도 알겠고...마지막에 d라는 명령어는 모든 브레이크를 지우는 역할을 한다.


지금 어떤 라인이나 함수에 브레이크 포인트가 설정되어있는지 확인할 때는 어떻게 할까?

당연히 설정되어 있는 브레이크 포인트를 보는 명령어도 있다.

 

info breakpoints


명령어가 조금 길게 느껴지지만...tab을 이용하면 된다.


사용을 했다가 안했다가 하는 브레이크 포인터를 지워버릴 수도 있지만...

활성화 비활성화 기능을 사용하는 것도 좋다.

 

enable 2

disable 2

 

여기서 뒤에 나와 있는 숫자는 라인넘버가 아닌 브레이크포인터의 넘버다.

브레이크 포인터의 넘버는 info breakpoints로 확인 할 수 있다.

 

3. 프로그램 수행

    명령어 : r (run) : 프로그램 수행

               r arg1 arg2 : 프로그램 수행 시 arg1과 arg2를 전달

    명령어 : k (kill) : 프로그램 수행 종료

    명령어 : s (step) : 현재 행 수행 후 정지, 함수 호출 시 함수 내부로 들어감

    명령어 : n (next) : 현재 행 수행 후 정지, 함수 호출 시 함수 수행 후 다음 행으로 감

    명령어 : c (continue) : 브레이크 포인트를 만날 때까지 계속 진행

    명령어 : u (until) : 현재 루프를 빠져나감

    명령어 : finish : 현재 함수를 수행하고 빠져나감

    명령어 : return : 현재 함수를 수행하지 않고 빠져나감

               return arg1 : 현재 함수를 수행하지 않고 빠져나가는데... arg1을 리턴

    명령어 : si : 현재의 인스트럭션을 수행, 함수 호출 시 함수 내부로 들어감

    명령어 : ni : 현재의 인스트럭션을 수행, 함수 호출 시 함수 내부로 들어가지 않음

 

프로그램 수행에 관한 부분은 따로 설명할 것이 없는 것 같다. ^^;;

실제로 프로그램을 돌리면서 하나하나 해 보는 것이 제일 좋다.



4. 와치 포인트

    명령어 : watch

 

watch i

이렇게 명령을 내린다면... i 변수에 와치 포인트를 설정하고 i 변수가 바뀔 때마다 브레이크가 걸리면서 i변수의 이전 값(Old value)과 현재값(new value)을 출력한다.

 

5. 변수와 레지스터 값 출력    명령어 : info locals : 현재 상태에서의 지역변수 출력

    명령어 : info variables : 현재 상태에서의 전역변수 리스트 출력

    명령어 : p (printf) : 개별 변수 출력

 

위에 명령어 옆에 써 놓은 간략한 설명 그대로다.

info locals 는 지역변수를, info variables는 전역변수를 보여준다.

p는 하나의 개별 변수를 출력하는데..


p number1


이렇게 입력하면 number1의 값을 출력하게 된다.

p명령어는 포인트 변수도 출력이 가능한데...C에서처럼.. 앞에 *를 붙여주면 된다.


p *pointer


라고 한다면... pointer가 가리키는 값이 출력된다. 만약 여기서, 앞에 *를 빼 먹는다면...그냥 pointer의 주소 값을 출력하게 된다.


또한, 포인트가 가지는 구조체 배열을 출력할 수도 있는데...이를 위해서는, *를 사용함과 동시에 배열의 크기도 알려야하는데..그때는 @를 사용하고, 기존에 포인터가 가리키는 곳을 출력한다는 의미의 p *pointer의 뒤에 배열의 크기를 알려주는 @4 (배열의 크기가 4라고 생각)를 더 쓰면 된다.


p *pointer@4


마지막으로... p명령어로 레지스터 값도 출력할 수 있는데...


p $eax

와 같이, $뒤에 레지스터 명을 적어주면 된다.




5.5 display를 이용한 변수 값 출력

    명령어 : display i

 

다시 한 번 예상치도 못했던...설명 부분이다..^^;; 그냥 변수 값을 확인하고자 할 때 p만을 사용해도 괜찮지만, 계속해서 그 변수를 확인해야 할 때, 매번 p명령을 내려야 하는 수고를 덜 때 편리한 방법을 소개하고자 한다. 위에 적어 놨듯이, 명령법은 간단하다.

 

display i

이 명령을 쓰면, s명령으로 한 행씩 진행하면서 p명령으로 매번 변수 값이 어떻게 변경되었는지 확인을 쉽게 할 수 있다.

이 명령은, 어떠한 범위를 넘어가면 자동으로 변수를 나타내지 않는데...

음...예를 들자면... 어떠한 함수에 num이라는 변수를 display명령으로 출력했다고 하자.

이 함수가 리턴되고 main함수로 돌아간다면...num이라는 변수는 더 이상 출력되지 않는다는 것이다.

또한 더 이상 디스플레이 되지 않는 변수를 지우거나, 변수 값의 출력이 충분할 때에는

 

undisplay i

라는 명령을 사용하면 되겠다.

 

또한, display명령도 브레이크 포인트처럼, 활성화 비활성화 기능이 있으므로, undisplay를 사용하기 싫다면...잠깐 비활성화 시켜 놓아도 괜찮겠다.

 

enable display 3    : 디스플레이 번호 3번을 활성화 시키겠다..

disable display 4   : 디스플레이 번호 4번을 비활성화 시키겠다..



6. 스택 상태 검사

    명령어 : bt (backtrace) : 전체 스택 출력

    명령어 : info f (frame) : 스택의 정보 출력

    명령어 : info args : 함수가 호출 될 때 인자를 출력

    명령어 : info locals : 함수의 지역변수를 출력

 

이 명령은...일단 프로그램이 실행 중이어야 한다. 그렇지 않고 그냥 info f 를 한다거나 bt를 한다면 스택이 없다고 출력된다. 스택은 하나일 수도 있고, 여러 개 일수도 있다.

일단 bt 명령으로 전체 스택을 보면, 각 스택의 번호가 매겨져 있다.

여기서

 

frame 3

한다면... bt로 봤던 여러 스택 중, 3번 스택으로 이동하게 되겠다.

 

up

한다면... 한 단계 상위 스택 프레임으로 이동

 

down

한다면... 한 단계 하위 스택 프레임으로 이동 한다.



세그먼테이션 오류나 다른 기타 오류 등을 판별할 때, 스택의 상태를 검사해 봄으로써 해결 할 수 있는 경우가 많고, 스택프레임 정보에는 함수를 호출하거나 할 때 인자와 함께 리턴 어드레스가 들어가 있기 때문에 디버깅 시에 더 중요하다고 할 수 있다. 그래서 함수의 인자 값을 읽어봄으로써 함수가 제대로 호출되었는지 확인할 수 있고, 리턴 어드레스를 읽어봄으로써 어떤 함수의 어떤 부분에서 해당 함수를 호출 했는지 알 수 있다.

 


유비쿼터스의 다양한 응용 컴퓨팅 기술

유비쿼터스의 다양한 응용 컴퓨팅 기술

① 웨어러블 컴퓨팅(Wearable computing)

웨어러블 컴퓨팅은 유비쿼터스 컴퓨팅 기술의 출발점으로서 컴퓨터를 옷이나 안경처럼 착용할 수 있게 해줌으로써 컴퓨터를 인간의 몸의 일부로 여길 수 있도록 기여하는 기술이다.

② 임베디드 컴퓨팅(Embedded computing)

임베디드 컴퓨팅은 사물에다 컴퓨터 칩(microchip) 등을 심어 사물을 지능화하는 컴퓨팅을 말한다. 예를 들면 다리, 빌딩 등과 같은 건축물에다 컴퓨터 칩을 장착하여 안정성 진단이나 조치가 가능할 것이다.

③ 감지 컴퓨팅(Sentient computing)

감지 컴퓨팅은 컴퓨터가 센서 등을 통해 사용자의 상황을 인식하여 사용자가 필요로 하는 정보를 제공해 주는 컴퓨팅 기술이다.

④ 노매딕 컴퓨팅(Nomadic computing)

노매딕 컴퓨팅 환경은 어떠한 장소에서건 이미 다양한 정보기기가 편재되어 있어 사용자가 정보기기를 굳이 휴대할 필요가 없는 환경을 말한다.

⑤ 퍼베이시브 컴퓨팅(Pervasive computing)

퍼베이시브 컴퓨팅은 1998년 이후 IBM을 중심으로 착안되었으며, 유비쿼터스 컴퓨팅과 비슷한 개념이다. 어디든지 어떤 사물이든지 도처에 컴퓨터가 편재되도록 하여 현재의 전기나 가전제품처럼 일상화 된다는 비전을 담고 있다.

⑥ 1회용 컴퓨팅(Disposable computing)

1회용 컴퓨팅은 컴퓨터가 1회용 종이처럼 가격이 매우 저렴화 될 수 있는 것을 실현하는 기술인데, 1회용 컴퓨터의 실현은 어떤 물건에라도 컴퓨터 기술을 활용할 수 있음을 지향한다.

⑦ 엑조틱 컴퓨팅(Exotic computing)

엑조틱 컴퓨팅은 스스로 생각하여 현실세계와 가상세계를 연계해주는 컴퓨팅을 실현하는 기술이다.