음악 검색!

from dasomoli & eureka 2009/09/30 11:14
요즘 MP3 듣는 일이 없어서 어떻게 검색하나 했더니 구글에서

1. 국산 외 : 앨범 + torrent 붙여 검색
2. "intitle:index of mp3 소녀시대" 같은 식

으로 가능하단다..
뭐 별일 없으면 사자. 요즘은 태그까지 잘 정리해서 적당한 가격에 파는 듯.

리눅스 커널 소스를 살펴보다가 헤더쪽의 매크로에서 "do { ... } while(0)" 와 같은 것이 많이 쓰인 것을 보았다.
당연히 { ... } 이 한번만 실행되고 끝나는 건데, 왜 이렇게 했을까 궁금해서 찾아보았다.

정리하자면,

1. 빈 문장(";")은 컴파일러에서 Warning 을 발생시키므로 이를 방지!
2. 지역변수를 할당할 수 있는 Basic block 을 쓸 수 있다.
3. 조건문에서 복잡한 문장을 사용할 수 있다. 예를 들면 다음과 같은 코드가 있다고 했을 때,

#define FOO(x) \
        printf("arg is %s\n", x); \
        do_something_useful(x);

다음과 같이 이 매크로를 사용한다면,

if (blah == 2)
        FOO(blah);

이렇게 해석되어서 쓰여진다.

if (blah == 2)
        printf("arg is %s\n", blah);
        do_something_useful(blah);;

뭐가 문제냐고? do_something_useful(blah); 는 조건에 관계없이 수행된다. 이는 원하는 결과가 아니다. 하지만 do { ... } while(0) 를 쓴다면 다음과 같이 해석될 것이다.

if (blah == 2)
        do {
                printf("arg is %s\n", blah);
                do_something_useful(blah);
        } while (0);

정확히 원하는 결과를 얻을 수 있다.

4. 3번과 같은 경우에 다음과 같이 사용할 수도 있지 않냐고 생각할 수 있다.

#define exch(x,y) { int tmp; tmp=x; x=y; y=tmp; }

그러나 다음과 같은 경우에는 원하는데로 동작하지 않는다.

if (x > y)
        exch(x,y);          // Branch 1
else 
        do_something();     // Branch 2

왜냐하면 다음과 같이 해석되기 때문이다.

if (x > y) {                // Single-branch if-statement!!!
        int tmp;            // The one and only branch consists
        tmp = x;            // of the block.
        x = y;
        y = tmp;
}
;                           // empty statement
else                        // ERROR!!! "parse error before else"
        do_something();

do { ... } while(0) 를 사용하면 다음과 같이 해석되어 원하는 의도대로 정확히 쓸 수 있다.

if (x > y)
        do {
                int tmp;
                tmp = x;
                x = y;
                y = tmp;
        } while(0);
else
        do_something();

5. gcc에서는 Statements and Declarations in Expressions 확장을 사용할 수 있다. 이는 위에서 본 do-while-0 Block 대신 쓸 수 있다.


참고 :    KLDP의 "의미없는 do while 문"
kernelnewbies.org의 "FAQ/DoWhile0"
ARM CPU Now & Future 라는 제목의 무료 동영상이 있길래 한번 보았는데 여러가지 주목할만한-내 주관적으로- 이야기가 있길래 정리한다. 자료 자체는 2008년 11월 25일 자료이므로 현재(2009.9.24) 상황과 비교해서 보는 것도 좋을 듯 하다.
강연 때 사용한 PPT 역시 구글에서 찾을 수 있길래 첨부(링크)한다.


1. 멀티 코어 관련 개발 기술 필수

일단 ARM 을 버전별로 나누어 정리한 표는 다음과 같다.

출처 : ARM CPU – Now and Future, Sanghi(Sky) Lim ARM Korea

ARMv4, v5, v6, v7 별로 어떤 코어가 사용되고 있는지 눈여겨 봐두자. ARM11-MPCore와 Cortex-A9 위에 화살표에 적힌 x1~4는 멀티코어 개수를 나타내는데, 반도체 회사에서 마음대로 최대 4개까지 코어 개수를 조정할 수 있다고 한다. 앞으로 나올 프로세서들에는 기본적으로 MPCore 기술이 들어간다고 하니 멀티코어 관련 개발 기술은 임베디드 개발하에서도 필수적인 기술이 될 듯 하니, 꼭 익혀둘 필요가 있다.
저가형을 대체하고자 하는 Cortex-M3와 Cortex-M1은 안의 FPGA 에 자체 개발한 IP를 탑재하여 시스템에 적용할 수 있다고 한다.

2. 파트너십에 의한 웹 접근성 강화

출처 : ARM CPU – Now and Future, Sanghi(Sky) Lim ARM Korea

웹 접근성 향상을 위해서 다양한 소프트웨어 회사들과의 작업중이라고 한다.

1. Adobe Flash player : 자료상으로 2009년 상반기 내에 Adobe Flash player 10가 ARM 기반(ARM v6, ARM v7)으로 출시 될 것이라고 이야기하고 있다.
2. Google Chrome : Google의 웹브라우저인 Chrome 은 PC와 ARM 을 동시에 지원하고 있다고 한다.
3. MS Silverlight & Media codecs : MS 윈도우즈 모바일의 실버라이트 역시 ARM 을 지원하도록 작업중이라고 한다. MS에서 미디어 코덱 역시 ARM을 위해 내어놓고 있다고 하니 멀티미디어 지원에 있어서도 강점을 갖게 될 것이다.
4. Firefox : Firefox 를 ARM CPU에 대해 최적화 작업을 해서 6배 빨라졌다고 한다. 또한, 이에 관현한 작업물들을 오픈소스로 공개하여 ARM 사이트에 가면 공개된 자료를 받아볼 수 있다고 한다. x86 기반의 소스와 비교하면 어떤 최적화 기법을 썼는지 볼 수 있으므로 도움이 되지 않을까?
5. Ubuntu : Canonical 에서 우분투 데스크탑을 ARM v7에서 사용하도록 지원한다고 한다. 단순히 커널 뿐 아니라 오픈 오피스 등의 프로그램 등도 지원한다고 한다. 우분투 기반의 많은 디바이스들이 나올 듯 하다.

위에서 보는 바와 같이 ARM은 임베디드 기기의 Major OS인 윈도우즈, 리눅스를 모두 효과적으로 운영할 수 있도록 지원하고, 플랫폼에 독립적인 웹 환경과 멀티미디어 분야 역시 지원하고 있다. 이를 보면 이미 예측된 바와 같이 무선 환경하의 ARM 기반 디바이스들에 사용될 소프트웨어 및 서비스 시장이 매우 커질 것을 예상할 수 있겠다.

영문 자료 중에 공부하고 싶거나 정리를 하고 싶을 때 나는 문장을 번역하면서 어디에 올려둔다. 시간이 오래 걸리기는 하지만 문장을 곱씹어 볼 수 있고 나중에 찾아볼 때도 번역된 내용물을 보는게 편하기 때문-역시 아직은 영문보다 국문이 편하다-이다. 올릴 때도 내가 어디에 있든 볼 수 있도록 대개 인터넷 어딘가-예를 들면 블로그-에 올려두는데 블로그에 올릴 때 항상 신경이 쓰이는 것이 저작권에 관련된 문제이다. 블로그 상에 어떤 정보를 올리는 것은 공공에 대한 배포 행위로 간주되기 때문이다. 내 블로그의 Reading 카테고리가 그냥 보면 모두 글 수가 0인 이유가 바로 여기에 있다. ㅋㅋ

오늘도 구글 안드로이드 관련 문서를 보다가 이 걸 번역해서 어디다 올려? 라는 생각으로 접근하다가 라이센스에 대한 내용을 한번쯤은 알고 넘어가야겠다는 생각에 여기저기 뒤적거리던 것들을 정리해두고자 한다.

먼저 번역물을 작성하는 것은 원저작물에 대한 저작권 침해의 여부가 있는지에 대해 알아야 하는데 간단하게 대답은 "예"이다. 원저자와 협의되지 않은 번역물은 원저작물에 대한 2차적 저작물의 작성권을 침해할 우려가 다분히 있다. 다만 이에 대해서도 예외가 존재하는데 이는 저작권법(일부개정 2009.4.22 법률 제9625호)의 "제2관 저작재산권의 제한"의 "제36조(번역 등에 의한 이용)"에서 기술된 바와 같다. 풀어서 쓰면 다음과 같다.

1. "학교교육 목적 등에의 이용(제25조)", "영리를 목적으로 하지 아니하는 공연,방송(제29조)", "사적이용을 위한 복제(제30조)" 의 경우에는 각 조항의 규정에 따라 번역, 편곡, 개작하여 이용할 수 있다.
2. "재판절차 등에서의 복제(제23조)", "정치적 연설 등의 이용(제24조)", "시사보도를 위한 이용(제26조)", "시사적인 기사 및 논설의 복제 등(제27조)", "공표된 저작물의 인용(제28조)", "시험문제로서의 복제(제32조)", "시각장애인 등을 위한 복제 등(제33조)" 의 경우에는 각 조항의 규정에 따라 번역하여 이용할 수 있다.

내가 이용하는 목적은 "사적이용을 위한 복제"에 해당하므로, 나는 번역해서 혼자만 보면 된다. ㅋㅋ
그렇지 않은 경우에는 번역권이라는 권리를 받아야 하는데 원저자의 일종의 허락과 같은 것으로 보면 될 듯 하다.

따라서 인터넷 상에 번역된 정보를 올리기 위해서는 원저작권자로부터 번역권과 배포권을 얻어야 하는 것으로 정리하면 될 듯 하다.

그리고, 번역권을 얻어 번역한 저작물에 대해서는 2차적 저작물로 취급되므로 독자적인 저작물로서 보호된다. 이에 대해서는 저작권법 "5조(2차적 저작물)"을 참고하면 된다.

처음엔 쉽게쉽게 쓰려고 했는데, 법률 등을 참고하다보니 글이 어려워보인다;;
구글 안드로이드 관련 문서들을 살펴보다가 괜찮은 문서가 있으면 공부 및 정리 겸 해서 번역하면서 보려고 생각하다가 그냥 번역하고 인터넷 상에 올리면 안될 것 같아서 문서들 아래에 적혀있는 다음과 같은 문구의 링크된 Content License 부분을 눌러서 보게 되었다.

Android 1.5 r3 - 21 Jul 2009 11:19


일단 Content에 대해서 두가지로 나누고 있는데, 먼저, "Documentation content" 라 하여 "Dev Guide" 와 "Reference" 탭에 있는 샘플 코드나 소스코드로 부터 생성된 내용이나 그 외 내용들로 하나를 구분하고, 기타 다른 사이트 상의 모든 내용들, 이렇게 해서 두가지로 구분한다.

Content License 에 따르면, 일단 "Documentaion content"는 Android Open Source Project의 일부로 사용 가능하고, 어떤 코드가 포함된 문서들은 Apache 2.0 라이센스를 따른다고 한다. 물론 그에 앞서 GPLv2나 그 외의 라이센스에 해당하는 소스코드를 포함하는 경우에는 해당 라이센스가 우선된다. Apache 2.0 License에 관해서는 KLDPWiki: 오픈소스 소프트웨어 라이센스 가이드Apache 2.0 라이센스 원문, 그리고 Apache 2.0 라이센스의 번역본(김윤수님의 Apache License Version 2.0 번역 완료) 글을 참조해보기 바란다.

그리고 나머지 사이트 상의 다른 모든 자료들은 Creative Commons Attribution 2.5[우리말] 라이센스를 따른다.