2010년 10월 25일 월요일

모바일 브라우저


목록열기 Hot News (4)
모바일 OS 시장이 분열되고 모바일 브라우저가 융합되면서 반대 방향으로 가고 있는 모바일 운영체제와 브라우저 Hot News / CityLife

2010/06/10 13:13

복사http://mirr21c.blog.me/70087706565

오늘의 분석 보내드립니다.

HTC 가 자체적인 OS 준비하고 있다는 루머와 모토롤라가 자체의 운영체제를 사들였다는 루머는 지속적으로 확인해봐야겠습니다.^^

모바일 OS 시장이 분열되고 모바일 브라우저가 융합되면서 반대 방향으로 가고 있는 모바일 운영체제와 브라우저

제공 : 한빛 네트워크

저자 : Jason Grigsby

원문 : Mobile operating systems and browsers are headed in opposite directions

Web 2.0 Expo에서 패널로 활동하는 동안 누군가가 패널리스트들에게 모바일 운영체제의 분열이 줄어들 조짐을 보이는지 물었다.

한 패널리스트는 일언지하에 이렇게 답했다. "아니오. 앞으로 더 분열될 것입니다."

모바일 웹과 비교해 모바일 운영체제는 다른 노선에 있음을 보는 것이 주목할 만하다.

2006년에는 두 가지 스마트폰 운영체제가 시장의 81%를 차지했다. 당시에는 사실상 심비안, 윈도우 모바일, RIM, Palm OS라는 4가지 플랫폼만 주목할 만했고, 이들 플랫폼이 시장의 93%를 차지했다.

[스마트폰 운영체제 시장 점유율]


현재로 넘어와서는 다른 양상을 보이는데, 어떤 운영체제도 단독으로 50% 이상을 점유하지 못하고 있다. 현재 7가지 운영체제가 조사되고 있는데, 심지어 이들 내에서도 분열 조짐이 있다.

그럼에도 앞으로는 더 많은 운영체제 분열이 전망되고 있다.

  • 지난 2월, MeeGo라는 새로운 오픈소스 스마트폰 운영체제를 만들기 위해 노키아와 인텔이 협력을 맺었다.

  • HP의 Palm 인수는 WebOS가 당분간은 사라지지 않음을 의미한다.

  • Windows Phone 7이 윈도우 모바일을 대체할 것이지만, 당장은 아니다. 또한 Kin이 어떤 식으로 Windows Phone 7과 합쳐질지는 분명하지 않다.

  • 삼성은 자체 운영체제인 Bada를 이번 여름에 탑재할 것이다. Bada를 폄하하기 전에 삼성이 U.S 모바일 가입자 제품의 가장 높은 비율을 차지하고 있고, 다른 업체보다 많은 터치 스크린 폰을 판매하고 있으며 올해 1,800만 개 스마트폰 판매를 목표하고 있다는 점을 상기해야 한다.

  • HTC가 자체의 운영체제를 고려하고 있다는 루머가 있다. HTC는 4번째로 큰 스마트폰 제조사다.

  • 모토롤라 역시 자체의 모바일 운영체제를 사들였다는 루머가 있다. 모토롤라 공동 CEO인 Sanjay Jha는 1분기 실적 발표에서 "언젠가는 우리 고유의 OS를 소유하고 있는 것이 아주 중요한 일이 될 것이라 믿는다"고 말했다.

위의 목록은 특정 운영체제 각각의 차이를 포함하지 않는다. MotoBlur와 HTC의 Sense UI 같은 서로 다른 사용자 경험에 기인해 Android의 분열이 발생하고 있다. 몇몇 이는 심지어 단일한 아이폰 플랫폼마저도 분열이 시작되고 있다고 주장한다.

여전히 더 많은 모바일 운영체제가 등장하고 있으며, 당분간은 모바일 OS 시장이 좁아질 조짐은 보이지 않는다.

융합 중인 모바일 웹

반면에 모바일 웹은 HTML5와 WebKit으로 융합되고 있다.

모바일 운영체제와 달리, 모바일 브라우저는 수 년 전에 분열되어 있었다. 초기 모바일 브라우저 중에는 여러 독점 브라우저 엔진이 있었다.

  • jB5 브라우저(jB5 Browser)

  • 폴라리스 브라우저(Polaris Browser)

  • 블레이저(Blazer)

  • 인터넷 익스플로러 모바일(Internet Explorer Mobile)

  • 오픈웨이브(Openwave)

  • 넷프런트(NetFront)

  • 오비고(Obigo)

  • 블랙베리 브라우저(Blackberry Browser)

이는 모바일 폰 사용자가 선택할 수 있는 브라우저 옵션의 일부였다. 모바일 브라우저를 더 일관성 있게 만들려면 여전히 할 일이 남아 있지만, 초기 모바일 브라우저 사이에 있던 비일관성에 비하면 아무것도 아니다.

오늘날 모든 모바일 브라우저가 HTML5를 이미 지원하고 있거나 지원하는 쪽으로 옮겨가고 있다.

[현대 모바일 브라우저]


위의 목록과 관련해 몇 가지 염두에 둬야 할 점이 있다.

  • HTML5를 명시적으로 지원하지 않을 주요 브라우저는 인터넷 익스플로러밖에 없지만, 데스크톱용 인터넷 익스플로러 9은 HTML5를 지원할 예정이다. 결국은 모바일 브라우저도 지원하게 될 것이다.

  • 브라우저가 HTML5를 지원한다고 말하는 것이 지금 당장 전체 HTML5 스펙을 지원함을 의미하지는 않는다. 단순히 스펙의 일부를 지원하고 있고, 완전한 지원을 지향하고 있음을 의미한다.

지원이 완벽하지는 않지만, 모든 모바일 브라우저가 지금껏 브라우저 간 차이를 줄여온 방식으로 완전한 HTML, JavaScript, CSS를 지원하는 방향으로 옮겨가고 있음은 분명한 사실이다.

WebKit: 가장 유력한 모바일 플랫폼

WebKit 브라우저 엔진은 모바일 브라우저 분야에서 지배적인 위치에 있다. 블랙베리에서 WebKit에 기반을 둔 새 브라우저를 탑재할 때는 스마트폰의 85%가 WebKit 기반 브라우저를 탑재하게 될 것이다. 단순히 장치에서 WebKit을 사용한다고 해서 최신 WebKit 버전을 보유하고 있고, 따라서 HTML5를 완전히 사용할 수 있음을 의미하는 것은 아니다. PPK는 WebKit 구현체 사이의 많은 불일치를 지적한 바 있다. 한편 Alex Russell은 이들 브라우저가 탑재된 시점을 고려하면 해당 불일치가 그렇게 나쁘지는 않다는 흥미로운 대조 항목을 작성했다.



수많은 피처 폰(feature phone)에서도 WebKit을 사용하고 있다. Vision Mobile은 2009년 말에 이르러 WebKit이 2억 5천만 대가 넘는 장치에 내장되었다고 평가했다.

모바일 브라우저 개선

많은 면에서 HTML5는 바로 모바일 브라우저가 지향하는 목표의 기준치다. 캐리어에서 핸드셋 제조사를 비롯한 많은 회사에서 모바일 브라우저 혁신을 자신들의 모바일 전략의 핵심으로 기대하고 있다.

  • WebOS는 Javascript를 확장해서 주소록, 카메라, 액셀러로미터 같은 장치 특성에 접근할 수 있게 하고 있다.

  • 소니 에릭슨은 PhoneGap 공동체와 협력해서 WebSDK를 만들고 있다.

  • 심비안은 웹 기술을 이용해 다이얼러, 캘린더, 카메라, 연락처와 기타 도구에 접근할 수 있다는 점으로 개발자들을 유혹하고 있다.

  • 40군데 캐리어와 핸드셋 제조사가 Wholesale Application Community를 형성해서 모든 장치에서 동작할 개방 플랫폼을 만들고 있다. 이들은 JIL과 BONDI를 결합할 방법을 모색하고 있다. JIL과 BONDI는 웹 기술을 이용한 장치 API 접근을 제공한다.

이들 각각의 이야기에는 두 가지 공통 줄기가 있다.

첫째, 에코시스템을 통해 업체들이 더 많은 기능을 제공하고 자신들이 만든 플랫폼으로 개발자들을 끌어들이려고 모바일 브라우저를 확장하고 있다. 둘째, 모든 업체가 HTML 위젯 기술에 기반을 둔 유사한 방식으로 확장에 접근하고 있다.

WebKit과 마찬가지로, 머지 않아 이러한 노력들 사이에 불일치가 발생하겠지만, 이러한 모든 노력이 같은 방향을 향하고 있다.

모바일 경쟁 구도

지난 12월, Morgan Stanley는 모바일 인터넷 보고서를 발표했다. 1,000페이지가 넘는 이 보고서에는 모바일 운영체제의 가능성에 무게를 둔 시나리오를 제시하는 슬라이드가 있다.



가장 가성성 있는 시나리오로 "최고의 HTML5 브라우저를 보유한 제품이 시장을 차지한다." 많은 모바일 회사가 HTML5 뒤에 줄 서 있고 모바일 브라우저 기술을 밀어부치고 있다는 사실이 더는 이상할 게 없다.

둘에서 여러 갈래로, 여러 갈래에서 하나로

2006년에는 두 가지 모바일 운영체제가 시장의 81%를 좌우했다. 2010년 현재는 10가지 스마트폰 운영체제가 나와 있다.

같은 기간에 걸쳐, 모바일 브라우저는 다양한 독점 렌더링 엔진에서 벗어나 WebKit 단독으로도 판매된 스마트폰의 85% 이상에 탑재된 브라우저의 기반이 될 지점으로 모였다.

두 운영체제에서 여러 운영체제로, 여러 브라우저에서 한 브라우저로 가고 있다. 우리는 서로 다른 방향으로 가고 있는 두 가지 핵심 모바일 기술을 가지고 있다.

( 출처 : http://www.hanb.co.kr/network/view.html?bi_id=1677 )

이 포스트를..

덧글 쓰기 엮인글 쓰기

확인 취소
닫기

String array to arraylist


String array to arraylist

vani mn
Greenhorn

Joined: Jan 21, 2006
Posts: 1
How to convert a string array to arraylist??
Garrett Rowe
Ranch Hand

Joined: Jan 17, 2006
Posts: 1285
If the concrete implementation doesn't matter, you can use Arrays.asList() to convert your array to a List.
  1. import java.util.Arrays;
  2. import java.util.List;
  3. import java.util.ArrayList;
  4. public class StringArrayTest
  5. {
  6. public static void main(String[] args)
  7. {
  8. String[] words = {"ace", "boom", "crew", "dog", "eon"};
  9. List wordList = Arrays.asList(words);
  10. for (String e : wordList)
  11. {
  12. System.out.println(e);
  13. }
  14. }
  15. }

2010년 10월 23일 토요일

0~n-1 난수만들기


난수 발생의 난해함 [Dev] General

2005/11/30 10:43

복사 http://blog.naver.com/pengooni/100020052692

1. 난수(random number) 발생기(generator) 구현의 어려움

표준 C 라이브러리에는 rand()라는 함수가 있다. 물론 각각의 시스템에 따라 이 함수의 구현(implementation)은 완전하지 않을 수 있다. 그러나, 이 함수보다 더 좋은 성능을 가진 함수를 직접 만들기란 쉬운 일이 아니다!

직접 난수 발생기를 만들려고 한다면, 읽어야 할 책이 많다!

r250, RANLIB, FSULTRA 등의 라이브러리가 있긴 하지만..

2. 특정 범위 내에서 난수를 발생시키고 싶은데

다음과 같이 하는 것은 (0에서 N-1까지의 수치를 리턴) 매우 서투른 방법이다

rand() % N /* POOR */

왜냐하면, 대부분의 난수 발생기에서 하위(low-order) 비트들은 그리 랜덤하지 않기 때문이다.

따라서, 다름과 같이 하는 것이 좋다.

(int)((double)rand() / ((double)RAND_MAX + 1) * N)

실수를 쓰기 싫다면, 다음과 같이 해도 좋다.

rand() / (RAND_MAX / N + 1)

두 방법 모두 RAND_MAX를 (에 정의되어 있음) 사용하고, N이 RAND_MAX보다 아주 작은 값이라는 것을 가정한 방법이다.

(어쨌든, RAND_MAX는 rand()가 리턴할 수 있는 최대 수치를 나타낸다는 것을 기억해야 한다. RAND_MAX에 다른 수치를 대입할 수는 없으며, rand()가 다른 범위의 수치를 리턴하도록 해 주는 다른 방법은 존재하지 않는다!)

만약 0과 1사이의 범위를 가지는 난수 발생기를 가지고 있다면, 그리고 0과 N-1사이의 범위를 가지는 정수 난수를 만들고 싶다면, 단순히 그 난수 발생기의 수치에 N을 곱하면 된다!

3. 프로그램을 실행시킬 때마다, rand()는 일정한 순서로 난수를 발생시킨다. 왜 그런가

srand()함수를 불러서 가상 난수 발생기에게 (pseudo-random number generator) 초기 값을 임의로 주면 된다. 이 초기값은 'seed'라고 하며, 대개는 현재 시간이나, 유저가 어떤 키를 누르기 전까지의 시간차로 지정한다. (물론 어떤 키를 누르기 전의 시간을 얻는 방법은 이식성있게 만들기가 힘들다!) (일반적으로 프로그램 내에서는 srand() 함수를 한번만 불러주어도 충분하다! rand()를 부를 때마다, srand()를 부른다면, 충분한 임의의 수치를 얻을 수 없다.)

4. 참/거짓을 나타내는 난수가 필요하다. 그래서 rand() % 2를 썼는데, 계속 0, 1, 0, 1, 0 만을 반복하더라

엉성하게 만들어진 가상 난수 발생기는 (pseudo random number generator) 하위(low-order) 비트들에 대해서는 그렇게 랜덤하지 않다. 상위(high-order) 비트를 쓰는게 좋다.

5. 그럼 도데체 일반적이거나 정규 분포를 위한 난수는 어떻게 발생시킬 수 있는가

Marsaglia씨에 의해 개발되고 Knuth씨가 추천한 방법이다.

#include
#include

double gaussrand()
{
static double V1, V2, S;
static int phase = 0;
double X;

if (phase == 0) {
do {
double U1 = (double)rand() / RAND_MAX;
double U2 = (double)rand() / RAND_MAX;

V1 = 2 * U1 - 1;
V2 = 2 * U2 - 1;
S = V1 * V1 + V2 * V2;
} while (S >= 1 || S == 0);

X = V1 * sqrt(-2 * log(S) / S);
} else
X = V2 * sqrt(-2 * log(S) / S);

phase = 1 - phase;

return X;
}

2010년 10월 22일 금요일

Big O notation

자료구조에서 빅오 (Big O)란 무엇인가요

zoojjang
2005.04.01 10:50
답변
3
조회
8,023

자료구조에서 빅오 (Big O) 표기법이 무엇인가요

좀 자세히 설명좀 부탁드려요.

질문자 채택된 경우, 추가 답변 등록이 불가합니다.

질문자 채택

re: 자료구조에서 빅오 (Big O)란 무엇인가요

milk4way
답변채택률 53.6%
2005.04.01 11:11

질문자 인사

<<>>

빅-오 표기법에 대해 간단히 설명을 하자면...

for (int i = 0; i < n; i++)
{
명령...
}
이런 문장은 n번 수행을 하기 때문에 O(n)입니다. i < 2n도 마찬가지로 1차이므로 O(n)입니다.

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

for (int i = 0; i < n; i++)
{
for (int k = 0; k < n; k++)
{
명령...
}
}
이 문장은 O(n^2)입니다. 즉 n의 제곱에 비례해서 명령이 반복되게 되는 거죠.
버블소트를 구현하면 두번째와 같은 명령어 구조를 띠기 때문에 버블소트의 계산복잡도는 O(n^2)이 되는 겁니다.

머 리쓰는 게임 중에 특수한 마방진(5 X 5)이 있다고 합시다. 어떤 사람은 25개의 수열이 모두 들어가는 경우(25!)를 감안하여 풀도록 프로그램하였다면 이것은 O(n!)이 되는 겁니다. 그에 반해 어떤 사람은 특수한 요령을 알아내서 5개씩 묶어서 5번 안에 해결되게 프로그램을 구현한다면 O(n^2)이 되는 겁니다.

즉 길이가 n인 프로그램에서 명령을 수행할 때 n에 얼마나 비례하여 명령이 수행되는가가 계산복잡도입니다.
출처
지식/in icarte 님의 답변내용
질문자/네티즌 채택

re: 자료구조에서 빅오 (Big O)란 무엇인가요

thisman24
답변채택률 87.9%
2005.04.01 11:32

질문자 인사

<<>>

어떤 간단한 프로그램이 있습니다. for()문을 n번 돌고나서 결과 하나를

출력하는 프로그램입니다. 그렇다면 이 프로그램의 라이프사이클중 가장

많은 부분을 차지하는 것이 n번의 for문 일 것입니다.

즉, 프로그램의 실행속도에 가장 지대한 영향을 끼치는 부분은 n회 for문!


어떻게 해도 프로그램의 실행속도는 최대 n번을 넘지 못합니다.

n번을 넘기는 컴퓨터가 있다면 미친 컴퓨터이거나 고장난 컴퓨터겠지요~! ^^;


이렇듯 빅오는 다음과 같이 해석하시면 쉽습니다.

O(n) : 최악의 경우 n번까지 돌면 프로그램은 끝낼 수 있다!

즉 힘껏 돌려봐야 최대 n번이면 끝낼 수 있다는 뜻이지요.

O(1), O(log n), O(n^2), .... 등등 다 마찬가지입니다. 그 이상은 안 넘긴다는

말입니다.


예를 들어.... 어떤 코드를 가중치에따라 측정해보니 "2n^3 + 4n + 7" 이렇게

나왔고, 이 것의 최대 한계 값인 O()를 알아보라고 했습니다.

보아하니 n^3이 있네요! 삼중루프가 있었나 봅니다. 그렇다면 4n이고 7이고

다 필요없지요~! 프로그램의 실행속도에 가장 많은 영향을 끼치는 것은 n^3

입니다. 따라서 위 식의 Big O는 O(n^3)이라고 말할 수 있는 것입니다.

n이 각각 10 정도면 그저그렇겠지만... 만약 1000번 정도만 된다고 생각하면

삼중루프일때... 약 1000000000! 헉! 1억번을 실행해야 하죠! 물론 중간에

끝날 수도 있지만, 최악의 경우에는 1억번을 돌고돌아야 합니다...

시간이 많이 걸리겠지요... 실제 상용프로그램이 이렇게 돌아간다면 사람들

분명 짜증날겁니다. 또 이 프로그램 안쓰겠지요... ^^; 누가 쓰겠습니까? ㅎㅎ


그래서 알고리즘의 개선은 중요합니다. 빅오는 이런 알고리즘을 개선하기 위한

척도를 제공해 주는 것입니다. 빅오 이외에 몇가지 더 있죠? 그 것들도 마찬가지

입니다.


두서없이 적었습니다... 어떻게 이해가 되시는지요? ^^
답변

re: 자료구조에서 빅오 (Big O)란 무엇인가요

blueyear77
답변채택률 69.4%
2005.04.01 11:08

notation은 단어 의미대로 '표기법' 이라고 생각하시면 됩니다. 그러니까

Big-O notation 은 '대문자 O 표기법'

Omega 는 'Ω 표기법', (Big-omega 라고 하기도 합니다)

Theta는 'Θ 표기법' (역시 Big-Theta라고 합니다)

이라고 생각하시면 됩니다.

수업을 들으셨다니

O(n), O(log n) 같은 것들을 이미 보셨으리라 생각합니다.

O 대신에 Ω나 Θ가 있을 수도 있죠. 이것들이 바로 그 notation들입니다.

세 가지 다 님께서 말씀하신 '알고리즘 효율'을 함수가 얼마나 빠르게 증가하는가를 나타내는 것으로 설명할 때 쓰입니다.

예를 들어 T(n) = 2n^2 + 5n + 6 이라는 함수가 있다고 합시다.

n이 점점 커진다면, 5n이나 6에 비해 2n^2 가 더욱 큰 비율로 늘어나고, 결국 n이 증가할 때 T(n)이 얼마나 빠른 속도로 증가하느냐는 것을 결정하는 것은 n^2입니다. 그렇기 때문에, 이 T(n)의 효율성을 Big-O notation으로 표현할 때

O(n^2) 라고 씁니다.

컴퓨터 프로그래밍으로 생각을 해 보겠습니다. n개의 숫자가 있는 정렬되지 않은 배열이 있고, 이 중에 가장 큰 숫자를 찾는 배열을 찾는 함수를 만든다고 생각해봅시다. 정렬이 되지 않았으므로 n개의 숫자를 일일이 체크해야하겠죠? 그렇다면 이 함수의 효율성은 그 숫자 n에 의해 좌우가 되므로 (10개면 10번을 체크해야하고, 20개이면 20번을 체크해야하죠) 이 함수의 효율은 O(n)이 됩니다.

반대로 정렬이 되어있는 배열에서 제일 큰 숫자를 찾는다고 합시다. 그럼 숫자가 몇 개든 상관없이 맨 뒤에 있는 숫자를 보면 되겠죠. n=10이든 n=20이든 걸리는 시간은 똑같습니다(constant). 이럴 땐 O(n)이 아니고 O(1)이겠죠.

이런 식으로 아래와 같은 Big-O notation들이 존재합니다. 보통 정렬할 때 걸리는 시간이라던가, 검색할 때 걸리는 시간등을 나타낼 때 가장 많이 나옵니다.

O(1) constant
O(log n) logarithmamic
O([log n]c) polylogarithmic
O(n) linear
O(n · log n) sometimes called "linearithmic"
O(n2) quadratic
O(nc) polynomial, sometimes "geometric"
O(cn) exponential
O(n!) factorial
O(nn) ?

Big-O notation 은 알고리즘이 얼마나 오랜 시간이 걸릴지 측정하는 데 도움이 되며, 또 같은 분류에 속하는 알고리즘들은 대충 비슷한 시간이 걸릴 것이라는 암시도 해 줍니다.

Big-O, Big-Omega, 그리고 Big-Theta의 미묘한 차이에 대해 서술하려면 수학적인 정의를 내려야합니다. (위에선 쉽게 설명했는데, 정확한 정의를 내리면 조금 복잡해집니다)

1. Big-O Notation

정수 (integers) 또는 복소수(real numbers)를 복소수로 변환하는 함수 f, g가 있다.

만약 |f(x)| ≤ C|g(x)|, x > k 를 만족시키는 상수 C와 k가 존재할 때, f(x)는 O(g(x)) 라고 한다.

2. Big-Omega Notation

정수 (integers) 또는 복소수(real numbers)를 복소수로 변환하는 함수 f, g가 있다.

만약 |f(x)| ≥ C|g(x)|, x > k 를 만족시키는 상수 C > 0와 k가 있을 때, f(x)는 Ω(g(x)) 라고 한다.

3. Big-Theta Notation

위와 같은 상황에서 f(x) 가 동시에 O(g(x)) 이고 Ω(g(x)) 일 때

f(x)는 Θ(g(x)) 라고 한다.

다시 말하면, Big-O Notation은 upper-bound, 즉 x가 증가할 수록 f(x) 보다 항상 스케일이 큰 g(x)를 찾는 것이고, Big-Omega Notation은 x가 증가할 수록 f(x)보다 항상 스케일이 작은 g(x)를 찾는 것이죠.

예를 들어보겠습니다.

f(x) = 8x^3 + 5x^2 + 7 이라고 합시다.

이것을 O(x^2) 라고 할 수 있을까요?

아닙니다. C가 아무리 크다고 해도, x가 무한으로 커지면 8x^3이 Cx^2 보다 커질 수 있기 때문이죠.

하지만 이것을 Ω(x^2) 라고 할 수 있을까요? 예, 그렇습니다. 바로 위와 같은 이유로, x가 무한으로 커지면 C가 아무리 커도 Cx^2보다 커질 수가 있기 때문이죠.

하지만 O(x^2)는 아니기 때문에 Θ(x^2)라고는 말할 수 없습니다.

그럼 x^3은 어떨까요?

잘 보시면 O(x^3)는 C가 8보다 큰 경우 성립하먀, Ω(x^3)는 C가 8과 같거나 작은 경우 성립한다는 것을 아실 수 있습니다. 그러므로 Θ(x^3)이라고도 할 수 있습니다.

쉽게 설명하자면, x^3을 주체(?)로 하는 함수가 f(x)의 아래와 위를 막고 있다는 얘기지요. 그러므로 x^3이 이 함수의 특성을 설명하기엔 적합한 겁니다.

이런 이유로, 알고리즘이나 함수, 또는 프로그램의 효율을 나타낼때는 Θ(Big-Theta)를 사용하는 것이 가장 강력한 힘(?)을 가지고 있다고 볼 수 있습니다.

조금 복잡한 설명이 되었지만 이 중 한 마디라도 도움이 되었으면 좋겠습니다. 덕분에 저도 복습할 기회가 되었군요. 그럼....

내용출처 : http://en.wikipedia.org/wiki/Big_O_notation 참조, Discrete Math. and Its Applications by Kenneth Rosen 참조

2010년 10월 21일 목요일

goog

검색알고리즘(알파벳에 원형으로 늘어져 있는데 C와 가장 가까운 알파벳을 찾는 알고리즘)
계산의 복잡도 비교문제 big O notation
코드 재사용

http://kldp.org/node/58570

http://www.workingus.com/v2/gnu/bbs/board.php?bo_table=job&wr_id=21153&sca=Interview_QnA&page=20

http://zariski.egloos.com/508274

2010년 10월 15일 금요일

What does IBM joining OpenJDK mean for Java?

What does IBM joining OpenJDK mean for Java?

Oracle is not playing fair

This week IBM announced it would be supporting Oracle's OpenJDK. At first glance it seems like "Great!"

Isn't it good that two big supporters of Java are getting behind a single open source project?

Well, in my personal opinion, no. It is bad. Bad for Java. I'll try to explain why.

The first point is that IBM are not just saying they will support OpenJDK. They are also saying that are pulling effort out of Apache Harmony. Apache Harmony is a project to build an Open Source JVM under the Apache license, rather than the GPL which is the license under which OpenJDK is available.

Harmony significantly predates OpenJDK and parts of Harmony are widely distributed in Android phones. Unfortunately there is a huge cloud over Harmony right now, and this news just made that cloud a good deal blacker. The lack of some IBM committers on the project isn't the problem. Apache encourages enough diversity that projects live on when one company pulls out.

To understand the clouds over Harmony let's first look at the legal situation here. Intellectual property, as we all know, is protected by two main models: copyright and patents. Simplifying hugely, copyright is about copying code, patents about copying ideas.

Apache Harmony was designed and built as a clean room implementation of Java. So no code was copied from any existing copyrighted JVM. But that doesn't protect against copying ideas - because even if the developers came up with the same idea independently, the patent still applies.

So how do Open Source projects protect themselves against patent issues?

The main way is to work with Open Standards that are covered by Open Specification promises or "Royalty Free" patent licenses. This is where major IP owners such as IBM and Microsoft have stated that they will not exert patent rights over either Open Source or Open Standard implementations of a particular standard.

Likewise most new standards from organizations such as OASIS are built on a Royalty Free basis, which means that all the companies that helped author the standard offer a free patent license to anyone implementing the standard.

There is a model under which Sun (and now Oracle) offers protection from patent issues: The Java Specification patent grant says that as long as you fully implement the Java specification and pass the tests that prove it - the Technology Compatibility Kit (TCK) - then you have a perpetual royalty-free license to patent rights that Oracle has over Java.

This sounds great. Not only has Sun/Oracle has made available Java under an Open Source license (GPL), but if you don't want to use GPL you can simply write another JVM that conforms to the tests and you won't be sued for patent infringement. Perfect. So what on earth are those whiners at Apache bothered about?

Unfortunately it isn't quite so simple. I hope you are following me so far. All Apache Harmony needs to do to protect against patent suits is to pass the TCK. Can Apache Harmony pass the TCK? Well, yes and no. Would it pass the TCK if the tests were run? Probably. Can the tests be run? No.

The TCK is not available to Apache in a way that allows Apache to run it. The JDK is available as Open Source, but the TCK isn't. To protect against patent issues, you have to talk to Oracle and get the TCK. And they will only give it to Apache with restrictions. In particular restrictions of a kind called Field of Use (FOU) restrictions.

Ok, this is becoming overly legal. I apologise. But I think its important to understand this story, because this really gets to the heart of how open Java is.

Open Source is not just "published code". If you take an Open Source library, then you are allowed to redistribute the code without prejudice. This is key to Apache and the Apache license. So Apache can't build in restrictions on who is allowed to take Apache code or what they can do with it. The Apache license doesn't allow it.

Unfortunately, Sun - and now Oracle - have said that they will only give the TCK to Apache if it restricts how the Harmony code can be used. Effectively what Sun/Oracle is trying to say is that Harmony code cannot be used by mobile devices (like Android). If Apache were to go along with this, it would mean shipping Apache Harmony under a different license from the Apache License. And this would no longer be Open Source.

Why not? Well a key part of the definition of Open Source is that there is no restriction on the Fields of Endeavour. In other words, if Apache agrees to the FOU restrictions that Oracle insists on, then the result would be that Harmony would not be Open Source. Naturally Apache cannot agree to that.

Let's recap. Anyone can create an Open Source JVM, but they cannot get patent protection unless they agree to Oracle's FOU restrictions, at which point it is no longer Open Source. Therefore no-one but Oracle can create an Open Source JVM without fear of being sued.

Ok, this all sounds highly legalistic and possibly quite theoretical so far. That was until Oracle sued Google over patents breached by Android phones running code from Harmony. The gloves are off. And the real result of this is that the only Open Source JDK that you can rely on having a patent grant is the OpenJDK. And if I modify OpenJDK then I am at the mercy of Oracle to grant me a TCK license.

Unfortunately this is simply bad for Java. Java as a language is threatened by many other new and old languages. For many users its simply a commodity runtime that they will use as long as it is commonly available. And knowing there are Open Source implementations that they can use is part of that decision. Knowing that there is effectively only one Open Source project that is free from Oracle's patent claims will affect the perception and the reality of Java's openness. And for many people the fact that this is under the GPL is an issue. You can see why IBM joined OpenJDK: Oracle has Apache Harmony in a tight place.

If you want to know more - as well as hearing the official Apache line as well as my own, then please take a look at Apache's letter to Sun when this first happened.

When this first blew up Sun was a struggling company that you could have argued needed the extra revenue Java licensing to mobile phones bought them, and which Harmony and Android threatened.

The question before us now is whether the same is true of Oracle, and whether Oracle is working in the best interests of its customers, the Java community, and the Open Source community. Do you believe that Oracle should license the TCK under an open license? And are you happy that despite the move to take Java Open Source, there really is no freedom to create Open Source implementations of the Java language.

The good news for Harmony is that Apache's diversity approach means that IBM pulling out won't harm the future of the code. The bad news is that there is one less company putting pressure on Oracle to make Java truly open.


Paul Fremantle is CTO of WSO2, where he works on Open Source projects in Apache, including the Apache Synapse and Incubator projects. He has contributed to Apache since the first Apache SOAP project. While at IBM, he was instrumental in starting up the Apache WSIF and Apache Woden projects, as well as being heavily involved in the AxisC/C++ initiative, where he led IBM's involvement. Publications include co-authoring "Building Web Services in Java, 2nd Edition", articles on Web Services and SOA, and a redbook - "The XML Files: Using XML and XSL in WebSphere".

Paul will at ApacheCon 1-5 November 2010.