블로그 이미지
초보 용사 꼬마라크. 그림은 만렙 용사 아랑소드 -네이버웹툰 아스란영웅전 발췌
꼬마라크

Notice

Archive

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
  • total
  • today
  • yesterday
2014. 12. 17. 16:13 Programmer/Linux

http://ngee.tistory.com/326


우선, 저 블로그에 있는 ibus를 활용하는 방법을 사용하였으며,

(블로그에서 트랙백을 허용하지 않는 관계로, 출처를 남깁니다.)



ubuntu에서 버젼이 몇 (이더라... 아마 13.04 정도..) 에서 성공했음을 알립니다.



우선, 한영키로 바꿀 수 없는 이유는 이미 단축키가 할당이 되어 있기 때문이죠..


알트키가 쓸데가 많은데 망할 리눅스가 hud를 보이는데 확 할당을 해버리니 뭔...



아무튼, HUD의 키를 바꾸고,

(원래 저기 보이는 Ctrl+Mod2+Alt L 이 Alt L 만 있었습니다. 마우스로 누르면 new accel... 나오고 거기에 키를 입력하면 됩니다.)



터미널에서 ibus-setup를 입력하면


요게 나오고,




enable or disable에서 한글키를 설정해 주면 됩니다.






(저기 키코드 옆에 ... 을 누르면 키를 하나 입력할 수 있습니다.)



이 상태로 하면 윈도에서 쓰는것과 같이 사용 가능합니다.



참고로,

링크의 블로그에선 english 키 레이아웃도 추가했는데,

전 korean만 남기고 다 지워버렸습니다.


그럼.

'Programmer > Linux' 카테고리의 다른 글

[링크]리눅스 명령라인의 진수  (0) 2007.12.14
[링크]linux 기본 명령  (0) 2007.12.14
[링크]VIM사용법  (0) 2007.12.14
fedora 7 SCIM 한영키 설정  (0) 2007.12.14
posted by 꼬마라크
2014. 1. 6. 19:18 Programmer

ljh131 (http://ljh131.tistory.com) 님의 ImageRaker (인터넷 사진 저장 프로그램)에서 이미지 순서대로 naming 하는 edition 입니다.

 

원작자 분이 순서대로 올리는 것에 대해 기능을 안 넣으신 이유가 있는지는 모르겠습니다.
(여쭤보니 별 쓸일 없을것 같아서 그러셨다는 군요 ㅎㅎ)


그래서 제가 만들었습니다.

버전은 (허락안받고) 0.8.2입니다


설치파일을 올립니다만,

ImageRakerSetup_v0.8.2(seq).msi

 

소스는 원 저작자님께서 커밋권한을 주시면 

https://code.google.com/p/imageraker/ 에 올리도록 하겠습니다.





Sequential을 선택하시면 #####_by_ImageRaker.확장자 로 저장이 됩니다.

감사합니다.

 

 

readme.txt

readme.txt 파일은

VS 2012로 할때의 설정값을 업데이트 해 놓은 자료입니다.

 

 

P.S.

무슨 문제인지 트랙백이 가질 않네요..

원작자님 블로그의 글을 링크로 대신합니다.

 

http://ljh131.tistory.com/152 

 

 


posted by 꼬마라크
2013. 4. 29. 20:57 기타

우선 링크는 여기.

http://my.taking.kr/26

 

C, C++, C# 등의 소스코드를 그냥 붙여넣고

 

<pre class="brush:c"> source code... </pre>

와 같이 소스코드를 붙여넣으면 예쁘게 나옵니다.

 

이렇게 하기 위해 위 블로그의 내용을 따라하다 보면,

안되는 경우가 생깁니다.

 

그 이유는 왠지 모르게 / (슬래시) 기호가 슬래시와 유사한 다른 문자로 바뀌어서 들어가는 것으로 보이는데,

이것을 그냥 copy/paste하는 경우,

script에서 인식하지 못하기 때문입니다.

 

 

해결방법으로,
skin.html에 넣기 전에 넣을 부분을 메모장 등에 복사 후,
ctrl+h (바꾸기) 명령을 통해 script안의 바뀐 / 를 
제대로 된 / (shift키 옆, 직접 입력)로 일괄 바꿔주고 
전체를 복사하여 skin.html에 넣어주면 됩니다.

 

p.s.

그리고, 댓글의 내용 중,

 

그대로 붙여넣게 되면,

줄바꿈 문자가 들어가지 않아

아래의 콘픽 상세설정 부분에 있는 한줄 주석이 이후의 내용을 주석처리 해버리는 상황이 생깁니다.

 

따라서, 안되는 경우 붙여넣으시고 줄바꿈 문자를 넣으시면 됩니다. (주석 끝날때마다 엔터)

posted by 꼬마라크
2013. 4. 24. 17:24 기타

egloos에 올린 글을 옮겨옵니다.

클리앙(http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=65093)에도 글이 올라가 있습니다.

 

 

Abstract

네트워크 공유(네트워크드라이브)를 이용하여, 보관함 및 미디어를 공유하는 방법으로 홈공유의 효과를 내는 방법입니다.

양쪽 컴퓨터에서 공유 잘 되며, 서브에서 음악 플레이 잘 됩니다.

미디어 추가는 양쪽 컴퓨터의 아이튠즈를 모두 켜놓으면 꼬이는 면이 있습니다

(이것은 아이튠즈가 종료될 때 현재의 리스트를 저장하는듯 합니다.

양쪽 다 켠 상태에서 한쪽의 리스트를 지우면 다른한쪽에서는 반영되지 않습니다.)


 

----------------------

1.Introduction

최근의 iTunes는 홈공유라는 기능을 제공합니다.

(9.0 버젼으로 업그레이드 되면서 생긴 것이라고 인터넷 어느 글에서 본 듯 합니다.)

저의 컴퓨터 사용 환경은 메인컴퓨터(24시간 가동, 연구실소재), 서브 노트북(이동용) 이렇게 두대인데요

이걸 어떻게 홈공유로 묶어서 연구실에서 사용하다가 집에가서 노트북으로 동기화하며 사용할 것인가?? 하는 고민이 생겼습니다.

많은 분들이 이런 점을 원하여, 홈공유를 사용하고 계시더군요^^ [1]

홈공유의 개념은 말그대로 집 컴퓨터들의 보관함을 공유하는것인데요,

검색해서 찾은 어느 글쓴이(레인코트 님)의 말을 옮기자면,

  • "PC, Macbook, iPod iTunes 라이브러리를 local network 안에서 최대 5대까지 무제한 공유해주는것. 그리하여 외장하드에 있는 나의 음악 파일들을 일일이 옮길 필요 없이 Macbook에서 바로 들을 수 있다는 것" [2]

글쓴이의 말처럼, 홈공유에는몇가지 제약사항이 있습니다.

  • 같은 iTunes 계정으로 로그인 및 컴퓨터 인증하여 홈공유를 설정할 것
  • (Bonjour 멀티캐스트를 위해) 같은 서브 네트워크에 기기들이 존재할 것

첫 번째 조건은 그냥 다 되시죠? ^^

(만약 5대가 초과 되었다고 나오면, 계정 들어가서 인증 초기화 하면 0으로 될 겁니다.

매 번 할 수 있는게 아니라 1년에 몇 번 안될거에요)

두 번째도 집에서 공유기 사용하셔서 연결하시는 분들은다 될겁니다. ^^

하지만, 문제는여기서 발생하죠,

두 컴퓨터를 집이 아닌 곳(다른 네트워크)에서 사용하시는 분!! (네 접니다)

이 글은 이런 분들을 위한 홈공유 방법입니다.

 

 

 

2.Related Works

처음에는 VPN을이용해서 시도해 봤습니다.

VPN은 외부에서 VPN 서버에 접속하여 내부네트워크에 자신의 컴퓨터가 존재하는 것처럼 속여주는 것! 이라고 할 수 있습니다.

그리고, VPN은의외로 매우 강력한 터널링을 제공합니다.(왠간해선 내용을 못본다고 생각하시면 좋습니다)

 

1) VPN (Hamachi)

VPN "" 으로 홈공유에 연결하는 방법으로는 (제가 인터넷에서 찾은 바로는)

Hamachi를 이용한 방법이 유일한 것으로 보입니다.[3]

이 방법은Hamachi라는 LogMeIn.com에서 만든 클라이언트를 이용하여 접속하는 방법인데요,

(네 클라이언트가 필요합니다.)

그래서 클라이언트를 안 깔고 기본 제공하는 윈도우의 pptp VPN 을 이용해보고 싶었습니다.

(아무래도 클라이언트를 까는건 단지 그냥 귀찮더라구요-_-?)

편하게 그냥 클라이언트 깔고 하셔도 됩니다. ^^ (하마치가 맥에서도 되는지는 모르겠습니다. 64비트 운영체제도잘 모르겠군요)

하마치는 개인용도로 무료로 사용할 수 있다고 합니다.

 

2) VPN (pptpd 또는 공유기)

리눅스의 pptpd또는 집에서 흔히 사용가능한 VPN지원해주는 공유기(인터넷에검색하시면 ip****나 기타 VPN지원하는거 몇 종류 나옵니다)를 사용하여 VPN을 구성할수 있습니다. 구성방법은 [4][5]를 참고하시면 될 겁니다.(건너뛸게요)

이 방법에는 중대한 문제가 있습니다. 그럼에도 이 방법을 설명하는 이유는 내부 네트워크의 컴퓨터에 접근하기 위함입니다.

그 문제점은 바로,iTunes Bonjour VPN과 충돌을일으키는 문제입니다.[6]

아무리 해보려 해도VPN의 충돌 원인이 pptpd subnet D-class로 잡고, 라이브러리 컴퓨터는 C-class로 잡혀서 그런듯 해보입니다.(많은 실험을 통해 내린결론입니다.)

아무튼 직접 이 방법으로 연결하는 것은 아니고, VPN을 이용해서 접근할수 없는 내부 IP(사설 IP)에 접근하기 위한 용도로 사용합니다.

 

 

 

3. VPN을 뚫고 홈공유(라이브러리 공유) 하는 방법

본론입니다.

홈공유라기 보단 라이브러리 공유가 더 맞겠네요, 홈공유는 아이튠즈에서 공유폴더를 이용해 접근하지만, 본 방법은 라이브러리자체를 공유/접근하는 것이니까요^^

요약하자면,

"네트워크 공유(네트워크 드라이브)를 이용하여, 보관함 및 미디어를 공유하는 방법으로 홈공유의 효과를내는 것" 입니다.

 

1) 우선 필요한 사항으로

  • VPN 서버
  • 네트워크 드라이브 (1. NAS또는 2. 고정적으로 켜져 있는 컴퓨터의 공유 드라이브/폴더)

2) 보관함 공유 방법

방법은 기나긴 서론 및 관련연구 등을 무색하게 만들정도로 쉽고 간단합니다

  • iTuens의 보관함 및 미디어들을 적당한 드라이브로 옮겨 줍니다. 그리고, iTunes의 보관함의 위치도 변경합니다. ([7] 참조)

이것은 미디어의 path를 동일하게 유지시켜 주기 위한 것입니다. 예를 들어 저는 파티션 하나 만들어서 (H 드라이브) iTunes 폴더를 그리로 옮기고 (h:\iTunes), 미디어들도 해당 드라이브에 저장해 놓았습니다. (h:\video, h:\music 등등)

파일을 모두 옮기시고, 아이튠즈 실행시 shift를누르고 있으면, 보관함 선택 버튼이 나옵니다. 옮긴 폴더안의 .itl파일을 선택하면 보관함의 위치가 변경됩니다.

  • 네트워크 드라이브로 해당 드라이브를 공유 설정해 줍니다.

아까 옮긴 파티션(드라이브)를 네트워크에서 접근가능하도록 파일 공유 해줍니다. 아마 속성에 공유 탭이 있을 겁니다.권한 설정을 통해 접근시 계정 및 비밀번호를 넣을수 있게 설정할 수 있습니다. 드라이브전체를 공유해야 이게 패스가 어긋나는 일이 없을 겁니다. (어차피 데이터 파티션이라 드라이브 공유해도상관없습니다.) 여기서 네트워크를 통해 수정 가능하게 하시면 외부에서도 보관함의 수정이 가능합니다. 또한, NAS 등을 이용한다면, 그냥접근해서 쓸 수도 있을 라나요? ㅎㅎ

  • 두번째 컴퓨터에서의 VPN 접속

같은 네트워크에 들어있다면 상관 없겠습니다만, 본 글 자체가 그러한 사용자를 대상으로 한 글이아닌 관계로 ^^ VPN연결이 필요합니다. 윈도우의 파일공유서비스는 역시 같은 네트워크를 벗어나면, 접근이 안됩니다. 그래서같은 네트워크에 있는 것처럼 속여줄 VPN이 필요합니다. 당연히 VPN서버와 메인 컴퓨터는 같은 네트워크에 있어야 겠지요?? ㅎㅎ확인해 본 결과 VPN 서버를 Gateway로 사용하여 인터넷에접근할 수 있도록 "원격 네트워크에 기본 게이트웨이 사용" 옵션이 선택되어 있어야 합니다. 그리고, VPN연결 후 인터넷이 안 되는 분은 VPN속성에서 DNS를 설정해 주시면 될 겁니다. ^^

  • 두 번째 컴퓨터에서의 네트워크 드라이브 등록

두 번째 컴퓨터(보관함이 없는, 노트북)에 네트워크 드라이브를 달아주도록 하겠습니다. 내컴퓨터나 네트워크를오른클릭하면 네트워크 드라이브 연결 이라는 메뉴가 있습니다. 해당 메뉴를 눌러 네트워크 드라이브를 만들어줍니다. 아까 설정한 고정접근 IP 주소 및 드라이브 공유이름을 이용하여 만들수 있습니다. 예를들어, IPaaa.bbb.ccc.ddd 이고, 드라이브 공유시 지정한 공유이름이Media, 해당 미디어 및 iTunes 보관함이 들어있는드라이브가 H 드라이브라면, 두 번째 컴퓨터에서의 네트워크드라이브 설정은 드라이브 문자 H, 폴더에 \\aaa.bbb.ccc.ddd\Media 라고적어주면 H드라이브에 연결이 됩니다.

  • 두 번째 컴퓨터에서의 보관함 변경

두번째 컴퓨터에서도 아까와 마찬가지로 보관함의 위치를 변경해 줍니다. 쉬프트를 누르고 iTunes를 실행 후, 보관함의 위치를 아까 만들어둔 네트워크 드라이브의 iTunes폴더로 바꿔 줍니다. 그러면 iTunes에서 메인 컴퓨터의 보관함이 그대로 나오는 것을 볼 수 있습니다.

  • 컴퓨터 인증 및 로그인

두 컴퓨터에서 모두 동기화를 하기 위해 컴퓨터 인증 및 같은 계정으로 로그인이 필요 합니다. 굳이필요하지 않을수도 있어 보이지만, 컴퓨터가 인증이 안되어있으면, 동기화과정에서 권한이 없다면서 앱을 몽땅 지워버리겠다고 협박합니다. 홈공유는 구지 할 필요는 없는데요, 그 이유는 공유를 통해 같은 보관함을 동기화 하고 있기 때문으로 보입니다.

 

 

 

4. 주의사항

  • 인터넷 연결이 반드시 필요합니다.

이게 상당히 중요한데요, 홈 공유를 하려는 목적 자체가 인터넷을 통한 미디어의 공유이기 때문에필요합니다. 만약 아이폰으로 테터링을 하면서 공유하고 싶다!!? 라고생각하신다면, 전 데이터 요금은 책임지지 않겠습니다. 그리고연결해 본 결과, 네트워크 드라이브를 연결해제 하지 않고 연결하면 네트워크 드라이브 연결이 불안한 것이확인되었고, 네트워크 드라이브를 삭제한 후 테터링 연결, VPN접속, 네트워크 드라이브 재 연결, 아이튠즈 실행의 순서로 연결해 보았는데, 좀 늦게 실행되긴 하지만 잘 됩니다.

 

 

 

5. 결론

대망의 결론입니다.

홈공유 한번 해보겠다고 삽질한 시간이 주마등 처럼스쳐지나가네요... 요약하자면, iTunes 및 미디어 파일의공유를 통한 라이브러리 공유로 홈공유의 기능을 흉내내 본 것입니다. VPN에 대한 지식이 도움이 많이되었고, 결정적인 힌트는 [8] [7] 이었습니다. 조금 복잡한듯 보이기는 하나, VPN에 대한 난관일 뿐입니다.

 

 

 

References

[1] 네이버 검색 (홈공유), http://search.naver.com/search.naver?where=nexearch&query=%C8%A8%B0%F8%C0%AF&sm=top_hty&fbm=1

[2]iTunes 홈공유, http://blog.naver.com/wizcat96?Redirect=Log&logNo=140093783421

[3] 이제 집과 회사에서 아이튠즈를 편하게 공유하자, http://itislord.tistory.com/519

[4]VPN with PopTop PPTPD, http://blog.daum.net/naegaewa/15867736

[5]ipTIME VPN 서버 사용하기, http://blog.naver.com/zoonosis1?Redirect=Log&logNo=114842079

[6] 윈도우즈용 Bonjour(봉쥬르)에 관하여, http://cafe.naver.com/machub/552 , 네이버카페 [애플매킨토시유저그룹], 가입필요

[7]iTunes(아이튠즈) 경로를변경 해 보자, http://song2song2.tistory.com/entry/iTunesmodifycourse

[8] 외장하드를 이용한 iTunes Library관리, http://blog.meson.kr/209  

posted by 꼬마라크
2008. 2. 26. 20:55 Programmer
posted by 꼬마라크
2008. 2. 25. 19:18 Programmer

SW 개발자의 길, 아니다 싶으면 포기하라!

20일 오전에 MS가 주관하는 ‘2007 데브데이’ 행사에 참석했다. IT업계에 종사하는 사람이라면, 아마도 한번쯤은 MS의 독점성과 라이선스 정책 등에 대해 불만을 품어봤을 만하다. 그럼에도 불구하고 SW 개발자들의, MS에 대한, 관심은 어느 행사보다 뜨거움을 느낄 수 있었다.

기자는 오전 행사 중 한국MS의 최고기술임원인 김명호 박사(혹은 이사, 왠지 모르지만 박사라는 호칭이 더 어울린다)의 기조연설만 듣고 나서 김박사와의 짧은 인터뷰를 진행할 수 있었다. 그는 기조연설과 인터뷰를 통해 ‘한국에서 SW 개발자가 가야 할 길’에 대해 <희망차고도 암울한> 사회적 딜레마를 이야기해 주었다.

아래의 글은 김명호 박사를 통해 들을 이야기를 바탕으로 작성해 보았다.

[明, SW 개발자여 전문인으로 거듭나자!]
ZDNet Korea의 컬럼니스트 중 한명인 류한석 소장은 얼마 전 자신의 컬럼에 ‘한국에서 SW 개발자가 성공하지 못하는 세가지 이유’를 통해 어려운 사회적 현실을 이야기 했다. 그러한 이유가 아니더라도, SW 개발자로 성공한다는 것 자체는 다른 어떠한 직업과 견주어도 결코 쉬운 것만은 아닐 것이다.

한국 자바 개발자의 1세대라 할 수 있는 김명호 박사 역시 개발자 출신으로 성공의 길을 걷고 있다고 할 수 있지만 “이 길이 아니다 싶으면 차라리 다른 일을 하라”는 말을 서슴지 않고 내던지고 있다. 요즘 시대에 개발자는 한국이라는 좁은 시장에서가 아니라 전세계적으로 통할 수 있는 전문성을 가져야 하는데, 이를 달성하는 것은 결코 쉬운 일이 아니기 때문이다.

SW 개발자로 성공하려면, 단기간 학원 교육을 통해, 누구나 습득할 수 있는 주류 기술 몇 가지만 배워서는 안 된다. 코딩, 테스트, 디버깅, 이식, 성능, 설계, 스타일 등 다양한 소양을 갖춘 전문인이 진정한 개발자라고 할 수 있다. 단순히 코딩만을 할 줄 안다고 해서 전문인으로써의 ‘정신과 혼’을 담지 않고 있다면 ‘하급 노동자’에 지나지 않는다는 것이다.

개발자와 아키텍트는 다르다
한국의 개발자들은 마치 개발자가 아키텍트로 가는 중간 단계로, 한번쯤 거쳐야 할 과정쯤으로 여기는 경향이 있다. 그러나 아키텍트와 개발자는 엄연히 다른 직업이다. 아키텍트가 되기 위해 개발자 경험이 있는 것은 좋지만, 막연하게 개발자를 거쳐 아키텍트가 된다고 생각하는 것은 옳지 않다는 것이 김박사의 설명이다.

그는 “아키텍트가 될 자질을 갖추는 것은 개인의 소양에 따라 다르다. 이를 건설에 비유하자면, 개발자는 건설현장에서 일하는 인부고 아키텍트는 건축설계사라고 볼 수 있다. 미적, 공학적인 요소를 갖추었을 때 건축설계사가 되는 것처럼, 현장 인부가 자신의 경력을 통해서만 될 수는 없는 것이다”라며 “대신 그들은 미장이나 도색 전문가 혹은 작업반장이 될 수 있다. 즉, 해달 분야의 전문가로 훌륭히 성공할 수 있는 것이다”라고 말했다.

그렇다고 벽돌을 나르는 수준의 초급 개발자가 10년 후 작업반장 수준의 상급 개발자가 되는 것은 아니다. 먹고 살기 위해서 개발을 한다면 행복해 질 수 없을 테고, 당연히 훌륭한 개발자가 될 수도 없다. 때문에 개발자들이 당면한 과제는 어떻게 하면 훌륭한 개발자가 될 수 있냐는 올바른 방법론이 필요하다.

이에 대해 김명호 박사는 몇 가지 지침을 가르쳐 준다.

훌륭한 개발자가 되려면?
1) 기본에 충실해야 한다.
여기서 말하는 기본과 초급은 분명 다르다. 개발자라면 알고 있어야 할 프로그래밍의 기본 구조나 알고리즘 등의 기본에 충실하지 못하다면, 10년이 지나도 불행하기는 마찬가지일 것이다. 만약 개발자인 당신이 먹고 살기에 급급해서 수박 겉핥기로 몇몇 기술만 습득했다면 지금이라도 당장 시작하는 것이 중요하다. ‘언젠가는 적용해야 할 핵심기술’을 습득하는 것이 중요하다.

2) 지식의 포트폴리오를 유지하라.
재테크에서의 교훈에 따라 ‘달걀을 한 바구니에 담지 마라’는 것을 생각하자. 즉, 개발자는 어느 한 분야에 올인하지 말고 ‘남들도 다 아는’ 주류 기술과 ‘남들은 모르는’ 전문 기술로 분산 투자해야 한다는 것이다.

3) 분야 전문가나 해박한 지식을 갖춰라.
앞서 언급한 대로 건설현장에서 미장이나 도색 전문가, 작업반장이 될 수 있는 분야별 전문가가 된다면 어디서든 존중 받을 수 있다. 그러나 여기서 중요한 것은 과도한 욕심을 부려서는 안 된다는 것이다. 분야의 전문가인 동시에 해박한 지식을 갖추고 있다면 그야말로 ‘천재’라고 할 수 있지만, 이 둘 중 한가지만 갖춰도 충분하다는 것이다. 모든 분야에 대해 피상적인 지식만을 갖추고 있다거나, 사장된 기술에 매달린다거나, 자아도취에 빠져 자신만의 방법이 옳다고 여기는 오류를 범할 수 있기 때문이다.

4) 학습을 두려워 마라.
이것이 김박사가 가장 강조하는 부분으로, 충분한 기본지식을 갖추고 있다면 새로운 지식을 습득하는 것에 두려움이 없으며 새로운 기술을 습득하고 끊임없이 발전해 나가는 것이야 말로 행복한 개발자가 되는 최우선 요소다. 만약 새로운 기술을 습득하는데 더디다고 느낀다면 그것은 기본이 부족하기 때문이며, 지금이라도 기본을 습득해 나간다면 신기술 습득에 대한 두려움은 사라진다.

이러한 개발자를 위한 성공 방법론이 제시됐음에도 불구하고, 개발자가 선택할 수 있는 최악의 길은 ‘다른 길을 찾아가는 것’이다. 개발자가 뭐 그리 대단한 것인가? SW 개발자가 아니더라도 얼마든지 다른 분야에서 전문인이 될 수는 있는 것이다. 자신이 택했지만 SW 개발자로의 미래가 안 보인다고 생각된다면, 과감히 다른 길을 선택하라.

개발자야 말로 ‘파레토의 80대 20의 법칙’이 가장 확실하게 적용되는 분야다. 20%의 능력 있는 개발자만이 훌륭하게 80%의 개발을 수행할 수 있다.

[暗, 과연 한국에서 SW 개발자가 성공할 수 있나?>
김명호 박사는 SW산업에서 이러한 파레토의 법칙이 중요하다고 말한다. 뛰어난 소수의 전문인력이 SW산업을 발전시킬 수 있고, 이러한 인재를 정책적인 지원 하에 키워내야 한다는 것이다.

그러나 현실은 그다지 밝지 않아 보인다. 정부의 정책이라는 것이 ‘노동정책’에 가깝기 때문이다. 즉, 대학과 같은 전문교육기관에 의한 전문가를 양성한다기 보다 실업자를 줄이기 위해 하급 개발자를 배출해 내는데 급급하고 있다는 지적이다.

막상 현재 대학의 교육 현실은 어떠한가? 학부제를 도입한 이후, 학생들은 어려운 과목은 제외하고 쉽거나 학점을 잘 받을 수 있는 과목을 수강할 수 있게 된 상태다. 숙명여대 전산관련 학과의 한 교수는 “요즘 학생들은 알고리즘과 같이 기본을 다질 수 있는 과목은 어렵다고 회피한다. 그저 취업을 위한 학점 챙기기나 가벼운 프로그래밍 기술에 몰린다”고 안타까워한다.

이럴 바에는, 오히려 비전공자가 낫다는 의견도 있다. 기본에 충실하지 않은 전공자들보다 학원에서 5~6개월 집중적으로 배우고, 취직해서 급여를 받는 이들이 더욱 충실도가 높고 급여도 적게 든다는 것에 SI업체들이 매력을 느낄 수도 있다는 것이다.

실패 거듭하는 ‘SW 정책’
실제 이렇게 부실한(기본에 충실하지 못하다는 의미로, 이들이 모두 부실하다는 것은 아니다) 개발자들을 고용한 SI업체를 통해 프로젝트가 실패한 경우, 그 책임소재의 표적은 SI가 아닌 HW로 돌리는 경향이 있기도 하다. 어떻게 보면 이것이 ‘SW 분리발주 정책’을 창출한 계기 중 하나이며, 개발자의 ‘표준공임단가’를 책정하게 된 이유가 될 것이다.

특히 개발자에 대해 표준공임단가를 두어 금전적 보상에 제한을 두어서는 안 된다. 이는 능력 있는 전문가가 되고자 하는 이들의 의지를 꺾을 수 있기 때문이다. 핀란드의 한 대학에서 내놓은 조사자료에 의하면 ‘SW 개발생산성에 있어 훌륭한 개발자 1명의 개발생산성이 하급 개발자에 비해 20배 가량 높다’는 결과가 있다. 이는 급여 측면에서 볼 때에도 그 이상의 가치가 있는 것이다.

현재 정부의 실업정책에 가까운 SW 정책은 이러한 측면에서 많이 부족하다는 지적이다. 즉, 표준공임단가에 묶여 있기 때문에 국내에서는 아무리 뛰어나다고 해도 인정받지 못하는 토양이 굳어져 가고 있으며, 이는 마찬가지로 기업 내부에서도 개발자에게 인색할 수 밖에 없다.

또한 전문인을 양성하기 위해 수년의 기간이 필요하지만, 단기간 성과를 내야만 하는 국내의 프로젝트 특성도 개발자를 힘들게 하는 악순환에 한 몫 거들고 있다.

소수의 전문인 중심 체계 필요
김명호 박사는 “정책적으로 획기적인 변화가 있어야 한다. 노동집약적 산업이 아닌 지식집약적 산업으로 바꾸기 위한 정책이 필요하다. 물론 교육도 마찬가지다. 전산 관련 대학 정원을 줄여서 의욕이 있는 전문가를 양성해 내고 이들을 대상으로 SW정책을 만들어 가야 할 것이다”라고 말했다.

그는 또 “16만 명에 달하는 국내 개발자들 모두에게는 미안한 말이지만, 누구나 다 성공할 수는 없다. 끊임없이 노력할 수 있고 자기를 발전시킬 수 있는 소수 개발자들만이 성공할 수 있으며, SW 정책도 이들에게 마음 놓고 일할 수 있는 환경을 만들어 주는 산업으로 만들어야 정부차원의 ‘미래의 먹거리’ 산업으로 성장할 수 있을 것이다”라고 주장했다. @
 
 
작성자 : 김효정 기자 ( ZDNet Korea )  
작성일 : 2007/11/21
 
 
posted by 꼬마라크
2007. 12. 28. 23:02 It's my life./요즘 뭐하냐?
인생의 전환점을 내가 만들어 가느냐.. 하는것과

나중에 그것이 전환점이었구나 하며 생각하는것은 커다란 차이가 있다.


생각하며 사는것과 사는대로 생각하는 것의 차이랄까..

인생에 있어서 생각하는대로 사는것이 나에게 어떠한 의미가 있는가를

빨리 깨닫는것이 인생을 조금더 보람있게 사는데 도움이 된다고 생각한다.



------------------------------------------------
ps.
용기를 내어 그대가 생각하는대로 살지 않으면
그대는 사는대로 생각하게 된다.                   -폴 발레리
posted by 꼬마라크
2007. 12. 14. 22:30 Programmer/Linux

'Programmer > Linux' 카테고리의 다른 글

Ubuntu 한영키로 한글변경하기  (1) 2014.12.17
[링크]linux 기본 명령  (0) 2007.12.14
[링크]VIM사용법  (0) 2007.12.14
fedora 7 SCIM 한영키 설정  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:29 Programmer/Linux

'Programmer > Linux' 카테고리의 다른 글

Ubuntu 한영키로 한글변경하기  (1) 2014.12.17
[링크]리눅스 명령라인의 진수  (0) 2007.12.14
[링크]VIM사용법  (0) 2007.12.14
fedora 7 SCIM 한영키 설정  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:28 Programmer/Linux

'Programmer > Linux' 카테고리의 다른 글

Ubuntu 한영키로 한글변경하기  (1) 2014.12.17
[링크]리눅스 명령라인의 진수  (0) 2007.12.14
[링크]linux 기본 명령  (0) 2007.12.14
fedora 7 SCIM 한영키 설정  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:27 Programmer/Linux
한참을 삽질한끝에..

한영키 사용에 성공했다.


1. keymapping 확인

    여기서 확인할것은.. Hangul과 Hangul_Hanja키의 키값!
    먼저 xev를 실행하면 키를 누를때마다 keycode값이 나온다. 그걸 잘 기억해둠!

      vi /etc/X11/Xmodmap

    요기 보면 뭔가 막있을건데.. i386 and apple인가? 그 부분으로 가서 해당 키를 추가
      ! keycode 113 = Hangul
      ! keycode 109 = Hangul_Hanja

2. SCIM상에서 키 배치 확인(한글, 한자 키가 제대로 눌리는지 확인)
   
    SCIM설정에서 한글탭에 보면 키설정파트가 있다.
    [...] 을 누르면 키설정이 나온다. 키 코드 옆의 [...]를 누르면 키코드를 확인할수 있는데
    거기서 확인된 키코드가 각각 Hangul, Hangul_Hanja가 맞는지 확인해보자.
    맞으면 한글 잘써질것이고,

    아니라면 3번으로 고고

3. 키보드 설정

    시스템-기본설정-하드웨어-키보드 의 키배치탭에서 키 배치 확인
    (hangul과 hangul_hanja키가 각각 ALT_R과 CTRL_R로 설정되어있는 경우가 있을수 있다.)
    2번에서 각각 ALT와 CTRL로 설정되어있다면 암만 삽질을 해도 한영키가 안먹는다.

    키보드 모델은 키 몇갠지 세서 넣으면 될거고,
    (노트북 사용자라면,, 아마 대부분 alt와 한영키, ctrl과 한자키가 같이 붙어있는
     101키 배열에서 키패드 부분이 빠진모양일것이다) -> 101키
    alt와 ctrl이 따로 있다면 106을 선택하면 된다.(만약.. 106이면 안된다고 떼쓸일도 없을듯)

    키배치 부분에서 korea, republic of에 안심하지 말고 저것을 지우고
    더하기 한번 해본다. 밑에 쭉 내려가다 보면 korea, republuc of가 있는데.. 고 옆에 세모를 눌러보면
    101/104key compatible 모드가 보일것이다..<-이놈이 키포인트

    고것으로 설정하고 저장저장

4. 아마도 일단 테스트 해보고 안되면 재시작하면 될듯!!



삽질은 실력의 기본 - I need more shoveling.

'Programmer > Linux' 카테고리의 다른 글

Ubuntu 한영키로 한글변경하기  (1) 2014.12.17
[링크]리눅스 명령라인의 진수  (0) 2007.12.14
[링크]linux 기본 명령  (0) 2007.12.14
[링크]VIM사용법  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:22 Programmer/Network Prog.
windows XP sp2에서는 raw socket으로 syn을 내보낼수 없다-_-!!!
이것 때문에 일주일을 밤샜고만...ㅠ


---------------------------------
같은수업듣는 학생이 찾아 올려준 글
---------------------------------

저도 TCP Raw 패킷을 보낼 때 자꾸 에러가 나서 인터넷을 뒤져보니 다음과 같은 내용이 있더군요..

2.

Why can't I send TCP packets on Windows XP?

New restrictions on raw socket functionality were imposed in Windows XP SP2. If you're running Windows XP SP2, you cannot send TCP packets (but you can still receive them), nor can you spoof the source address of IP packets. The source address must exist on a local network interface.

Win XP SP2에서는 TCP raw packet을 보낼 수 없다네요.. 그렇다면 그 전 버전에서는 됐다는 것 같은데 그 전 버전이 없어 확인은 못해 봤습니다.

내용 출처 : http://www.savarese.org/software/rocksaw/faq.html

 

관련 기사 :

http://www.zdnet.com.au/news/security/soa/Microsoft-tries-to-quell-TCP-IP-danger-/0,130061744,139189876,00.htm

 

-----------------------------------------------------



////////////////////////////////
참고 : 또 다른 학생이 올려준 글
////////////////////////////////

 SYN 패킷을 만들기 위해 이더넷, IP, TCP 헤더의 중요 필드들을 프로그램으로 채워야 한다. 이때 IP와 TCP 의 데이터 필드에는 check sum을 확인 하고 패킷 오류를 판단하기 때문에 틀리지 않게 프로그램 해야 한다.

  또 source port, sequence 넘버를 동일하게 보내면 받는 쪽에서는 중복된 패킷이 온 것으로 보고 폐기해 버리기 때문에 random 하게 자료를 입력해야 한다.

  SYN packet 공격에서는 서버가 공격자로 SYN/ACK을 보내고 대기해야 한다. 이러한 서버사이드의 SYN/ACK 동작을 유도하기 위해서는 tcp 패킷에 추가적인 옵션으로 SACK 정보를 실어 총 28바이트를 전송해야 한다는 사실도 유의해야 한다.

'Programmer > Network Prog.' 카테고리의 다른 글

[링크]bit단위 선언  (0) 2007.12.14
[링크]Socket 이란?  (0) 2007.12.14
[링크]socket-client에 bind없는 이유  (0) 2007.12.14
connection-oriented와 connectionless 의 차이  (0) 2007.12.14
#pragma pack()  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:17 Programmer/Network Prog.

'Programmer > Network Prog.' 카테고리의 다른 글

TCP SYN flooding  (0) 2007.12.14
[링크]Socket 이란?  (0) 2007.12.14
[링크]socket-client에 bind없는 이유  (0) 2007.12.14
connection-oriented와 connectionless 의 차이  (0) 2007.12.14
#pragma pack()  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:09 Programmer/기초

http://www.winapi.co.kr/ApiBoard/tbltip/How%20DLL%20Works.pdf

간단한 설명!

명쾌하다.

위의 링크의 내용을 간추리면.. 아래로...

-----------------------
dlltest.c

__declspec(dllexport) char *str = "THE TRUTH IS OUT THERE";

__declspec(dllexport) int add(int a, int b)
{
 return a + b;
}

// c에선 extern "C" 하면 왠지 안된다.. (원인은 해석하기 귀찮아서 pass, 할필요가 ㅇ벗는데 써서 에러내는건가?)
// cpp에서 만든걸 c에서 쓰게 하려면 extern "C"꼭 필요하다...

빌드하면 dlltest.dll이 되것지?


// implicit 한 방법. (explicit는 링크의 문서를 읽어보시라)
// main program에서는 dll과 함께 생성되는 lib파일과 헤더 선언이 필요하다.
test.h

extern "C" __declspec(dllimport) char *str;

extern "C" __declspec(dllimport) int add(int a, int b);

// C가 만든 외부 dll에 함수와 변수가 있도다.


test.cpp(c)

#include "test.h"    // 요렇게 extern 선언 필요
#pragma comment(lib, "dlltest.lib")


int main()
{
    printf("%s\n",str);
    printf("%d + %d = %d\n",1,2,add(1,2));
}

결과
THE TRUTH IS OUT THERE
1 + 2 = 3
press any key.


'Programmer > 기초' 카테고리의 다른 글

little endian과 big endian  (0) 2007.12.14
infinite number의 정의  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:06 Programmer/Network Prog.

'Programmer > Network Prog.' 카테고리의 다른 글

TCP SYN flooding  (0) 2007.12.14
[링크]bit단위 선언  (0) 2007.12.14
[링크]socket-client에 bind없는 이유  (0) 2007.12.14
connection-oriented와 connectionless 의 차이  (0) 2007.12.14
#pragma pack()  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:06 Programmer/Network Prog.

'Programmer > Network Prog.' 카테고리의 다른 글

[링크]bit단위 선언  (0) 2007.12.14
[링크]Socket 이란?  (0) 2007.12.14
connection-oriented와 connectionless 의 차이  (0) 2007.12.14
#pragma pack()  (0) 2007.12.14
buffer와 structure  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 22:00 Programmer/Network Prog.

나는 커넥션 오리엔티드와 커넥션리스에 대해 오해라고 해야하나..

부족한이해라고 하는게 맞을듯.


지금까지는..

그냥 간단하게..커넥션 오리엔티드는 두 호스트 사이에 연결을 맺고 그 연결을 유지하면서 통신을 하는것!

이라고만 생각했고.. connection-oriented라는 이름만 놓고 봐도 저 것이 맞다고 느끼게끔 되었다고나 할까?-_-


그러나;;

정확한 정의는 그 너머에 있었으니...

우선 우리가 CO(connection oriented)와 CL(connection less)라 부르는것들을 비교해 보자면

CO는 데이터 교환에 앞서 두 호스트간의 연결(경로를 설정한다) - TCP
    TCP는 데이터가 어디로 갈지 알기 때문(connect 함수)에 send, recv를 쓴다.
    SEQ번호등이 있다.
    virtual circuit

CL은 이러한 연결없이 데이터를 주고받는 다 - UDP
    UDP는 데이터가 어디로 가야할지, 그리고 어디서 오는건지 모르기 때문에 sendto, recvfrom을 쓴다
    (가끔 udp도 connect를 쓰기도 하나.. 이는 연결이라기 보다, 어디로 가야하는가와 어디서 오는가를 정해놓는다는 의미랄까.)
    SEQ없이 전송된다.(독립)
    datagram

뭐 이렇게 알고있었지만... (나만그렇게 알고있었나..?)
(실제로 교수님이 하나씩 붙들고 물어보셨다.. 자네! connection oriented가 뭔가?)

그리고  중요한 factor는 IP는 datagram이라는 사실이다...-_-;
이건 뭔말인가? UDP처럼 connectionless라는 말이지..

그럼.. IP위에서 동작하는 TCP가 CO라는것이 무슨의미가 있는가?
어차피 IP에서는 되는데로 가는데???
아무리 TCP에서 http에서 어디로 가라라고 해도 ip에서 지맘대로 보내는데 CO가 가능하냐?
IP에서의 전송은 best effort, 즉 나름 최선을 다할뿐 못가도 할수 없다는 놈들이 IP인데?



문제는 정의에 있었다.
정의 definetion,

CO의 정확한 정의는 어떤 데이터를 보냈는데 그 데이터를 상대방이 받았다는것을 보장하는 것 이다
CL은 그 반대, 받거나 말거나 상관안한다는 것이다

즉 위에 위에 설명한 CO 와 CL의 차이는 정의가 아닌 특성의 차이이고, protocol적인 method를 말하는 거였으니..

그렇다면 이해가 가지 않는가?

IP가 아무리 datagram이라도 상대에게 받았다는 확인을 받는것.. timeout시에 재전송을 하는것, 순서를 기다리는것 등이
상대에게 받앗다는 것을 확실히 하기위해 가상의 루트를 만드는것(virtual circuit) - 전화망도 CO다
즉 CO하면 virtual circuit을 떠올려 CO = virtual circuit이라는 공식을 가지고 있었고,
CO라 하면 연결을 미리 맺어놓고 통신하는것 이라고 알고 있었지만..

이것이 CO의 본질이 아닌 그저 CO를 위한 방법론에 불과했다는 사실.


(물론 ip에서도 virtual circuit을 위한 method가 존대한다.. connect시에 routing table을 지정한 경로로 설정하는것이 그것이다. 하지만 이것이 IP또한 CO를 지원한다는 것이 아닌 단순한 pass through일뿐이라는것을 알아야 한다. 라우터의 세계(ip)는 transport layer가 없다. 즉 알아서 탐색해 주느냐(datagram) 미리 table을 dest로 설정하느냐의 차이일뿐 IP가 datagram이라는것은 변함이 없다.)

'Programmer > Network Prog.' 카테고리의 다른 글

[링크]Socket 이란?  (0) 2007.12.14
[링크]socket-client에 bind없는 이유  (0) 2007.12.14
#pragma pack()  (0) 2007.12.14
buffer와 structure  (0) 2007.12.14
host byte order와 network byte order  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 21:59 Programmer/Network Prog.
byte align방법 : 과연 몇바이트를 얼라인 할것이냐..

우선 샘플 스트럭쳐..
struct shovel {
    short armLength;       // [2]삽길이
    char type;                //  [1]네모삽,세모삽, 모종삽
    char weight;             //  [1]삽무게
    short price;              //  [2]새 삽 가격
}    // 총 6바이트

[-------- --------][--------][--------][-------- --------]
         short           char      char          short

해본사람은 안다.. 물론 해봐도 오래전에 해봐서 기억이 가물가물하면 까먹는다.

sizeof(shovel)하면 얼마가 나올까요?

시스템마다 다르것지만.. 8이 나올걸..

삽의 사이즈는 8
실제 스트럭쳐는 6

어허허..-_-

메모리가 몇바이트 단위로 잘려있느냐 하는걸 정하는 것의 차이가 되것다.

vs의 경우 기본값이 intel의경우 8이던가..?-_-(다른것도 8인가?)


실제 6바이트짜리로 선언을 하더라도.. 메모리관리의 편의상..8바이트로 관리된다.

그래서 네트웍 프로그래밍을 할때는 구조체 선언부에서 #pragma pack() 매크로를 써준다

실제 원하는 사이즈의 구조체를 얻기위해.. 안그러면.. 보내는데 중간에 이상한 몇바이트가 끼어있는걸 확인할수 있다
(실제로 봐야 얼마나 황당한지 알수 있다.)

#pragma pack(1)        // 1byte align
struct shovel {
    short armLength;       // [2]삽길이
    char type;                //  [1]네모삽,세모삽, 모종삽
    char weight;             //  [1]삽무게
    short price;              //  [2]새 삽 가격
}    // 총 6바이트
#pragma pack()        // 원래대로 되돌림.

요러면.. 저 구조체를 6바이트만 갖는 구조체로 쓸수있다 이거지...

또한 stack을 사용가능하다.

#pragma pack(4)            // 원래 어쨋든 4로 align
#pragma pack(push, 3)    // 4를 스텍에 넣고 3으로 align
#pragma pack(pop)        // 스택에서 하나꺼냄. 4로 다시 align
#pragma pack()            // 4가 되기 이전의 값으로 되돌림.


역시 뭔가 배우는거의 기본은 삽질.. 왕도는 없다.

'Programmer > Network Prog.' 카테고리의 다른 글

[링크]Socket 이란?  (0) 2007.12.14
[링크]socket-client에 bind없는 이유  (0) 2007.12.14
connection-oriented와 connectionless 의 차이  (0) 2007.12.14
buffer와 structure  (0) 2007.12.14
host byte order와 network byte order  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 21:58 Programmer/Network Prog.

드디어 오늘 적으려했던 주제에 도달.

send()함수에 넣어주는 param으로 char형 포인터가 있다. 요놈을 메세지라 부르지;;

난 여지껏 char *라길래.....-_- 정말 char 포인터를 만들어서 넣어주었지...배열로;;-_- 요놈을 버퍼라 부르더군... 캐릭터어레이;

이것이 바로 삽질의 기초;;-_- 모르면 그냥 해라



그제 충격적인 사실을 알았다..-_-

저기 저 char포인터대신 스트럭쳐가 들어가도 된다더라...

-_-!!!!!!! 어찌 이런일이..란느 생각뿐;;


부끄럽지만 다음엔 삽질하지 말자는 마음으로..공개하것다.

나름 머리를 쓴거지;; 데이터를 주고받을때 structure로 관리하면 편하것지? 하면서 일단 structure만들어 주시고
데이타 저기다 다 넣어 주시고..
저걸 다시 한바이트씩 짤라서 캐릭터 어레이에 한칸씩 채워준다음에
send(chararray)했다는 사실...

웃자 :D


엔 충격적인 사실..

데이터를 structure로 관리하는건 맞다. 다만 보낼때...캐스트를 쓰면 된다-_-
send((char*)structure)

-_- 이 어찌 충격이라 말하지 아니할수 있단말인가..

이 간단한걸 생각해 내지 못하고 그 삽질을.. 하다니..



오늘 실습시간에 역시 확인사살을 받았다..

조교 曰
ip패킷의 스트럭쳐를 보시면 아시겠지만..주고받을때 스트럭쳐로 하는게 맞습니다.-_-



ip패킷 스트럭쳐야 보긴 수없이 봤다만.. 본것만이 다가 아니고 내가 이해한것만이 다가 아니다라는 것을 배웠다
(제대로 이해해야 다지..)

'Programmer > Network Prog.' 카테고리의 다른 글

[링크]Socket 이란?  (0) 2007.12.14
[링크]socket-client에 bind없는 이유  (0) 2007.12.14
connection-oriented와 connectionless 의 차이  (0) 2007.12.14
#pragma pack()  (0) 2007.12.14
host byte order와 network byte order  (0) 2007.12.14
posted by 꼬마라크
2007. 12. 14. 21:57 Programmer/Network Prog.
host byte order와 network byte order

말그대로 host (자기컴퓨터)에서 사용하는 byte의 순서
그리고 네트워크에서 사용하는 바이트의 순서

컴퓨터 통신에 있어서 이 순서는 매우 심각한(난감한?) 결과를 가져올수 있다..-_-


이전의 little endian과 big endian의 차이인데

little endian 을 사용하는 컴퓨터에서 big endian을 사용하는 컴퓨터와 통신을 하려고 하면...?

data = 0x 12 34 56 78

요놈을 A(little endian)에서 B(big endian)으로 보낸다고 해보자..

통신이라는 것이 순서대로 주고받는것임을 명심해야 한다.

MSB부터 가든.. LSB부터 가든..(대부분 MSB부터 가더라, LSB부터 가는게 있는지는 확인못해봄-없나?)
A의 메모리에 들어있는 데이터는 little endian이므로
78 56 34 12

12 34 56 78
------------->
(4) (3) (2) (1) 이래 보내면 받는쪽에서는

78 56 34 12
------------->
(1) (2) (3) (4)의 순으로 받는다(당연한가?)

이 받을것을 가지고 저장을 하려면..
1)little endian의 경우 먼저온것(MSB)이 앞에 저장된다
78 56 34 12 -> 요걸 사용할때는 0x12 34 56 78으로 쓰는것

2) big endian의경우 도 먼저온것을 앞에 저장해야 겠지?
78 56 34 12 -> 요걸 사용하려면 그냥 쓰면 된다 0x 78 56 34 12

여기서 숫자가 바뀐다.

그래서 합의한 것이 network byte order. 네트워크에서 사용하는 바이트의 순서를 정하자라는것이다.

결론부터 말하자면 네트웍 바이트 오더는 빅엔디안과 같다.(빅 엔디안을 사용한다)

즉.. 보낼때는 네트웍바이트 오더로 바꿔서 보내고 받아서 자기가 쓰는걸로 바꿔라라는 컨셉

인텔에서 보내려 할때
0x12345678 이라는 값은 메모리에 78 56 34 12로 저장이 되어있는데
요건 리틀엔디안이므로 빅엔디안으로 바꿔서(12 34 56 78) 앞의 번지부터 보낸다.

모토로라에서 받은것은 12 34 56 78
이것이 메모리에 들어갈때도 12 34 56 78
이걸 이제 모토로라에서 사용가능한 오더로 바꾸면..(사실 바꿀필요 없다)
12 34 56 78로 메모리에 저장이 되고, 사용도 12 34 56 78로 쓰면 된다.

이것을 어떤 함수가 하느냐?
ntoh 와 hton이다. 각각 long와 short 타입이 있다, (ntohl, ntohs, htonl, htons)
의미는 글자그대로.. network to host, host to network

저 함수안을 안들여다 봤지만..
ifdef와 같이 선언되어있을것으로 생각된다.(유저는 알필요없다)

즉, 인텔이든 모토로라든 hton을 부르면 네트웍오더(빅엔디안)으로 바꿔주고(인텔의 경우 오더바꿈, 모토로라는 그대로 리턴)
ntoh를 부르면 호스트오더로 바꿔준다.(인텔이면 오더를 바꾸고, 모토로라는 그대로 리턴)



'Programmer > Network Prog.' 카테고리의 다른 글

[링크]Socket 이란?  (0) 2007.12.14
[링크]socket-client에 bind없는 이유  (0) 2007.12.14
connection-oriented와 connectionless 의 차이  (0) 2007.12.14
#pragma pack()  (0) 2007.12.14
buffer와 structure  (0) 2007.12.14
posted by 꼬마라크