Rev. 2.73

지난 9일 구글 크롬 브라우저는 WebSocket(웹소켓) API를 지원한다고 발표했습니다. 그리고 최근에 Jetty(웹 서버)WebSocket을 지원하는 버전을 배포했습니다. 그렇습니다. WebSocket은 브라우저만으로 사용할 수 있는 것이 아니라 웹 서버도 함께 지원되어야 하는 것입니다. 웹 개발자들 사이에서는 HTML5 명세에도 표준으로 자리매김하므로써 다른 브라우저나 웹 서버들이 이를 지원하는 것은 시간문제로 치부하고 있습니다. 이는 곧 Ajax의 혁명으로 다가 올 것이며 기존 웹을 온전한 리얼-타임(실시간)으로 만들어 줄 것으로 기대하고 있습니다. 구글 Wave와 같은 실시간 인터랙션의 웹 애플리케이션들을 어렵지 않게 구축할 수 있게 되는 것이죠. 실제로 Jetty 웹 서버(7.0.1)를 로컬에 설치하고 크롬 브라우저(베타)에서 채팅 예제를 실행해 보았습니다. Comet을 기본으로 사용하는 Jetty 6.x의 것과 비교하면 매우 간결하고 성능도 좋다는 것을 굳이 소스를 확인하지 않아도 알 수 있었습니다. 조만간에 고정 IP에 Jetty를 설치하여 실제로 돌아가는 여러 예제들을 작성해 볼 예정입니다.

if ("WebSocket" in window) {
  var ws = new WebSocket("ws://example.com/service");
  ws.onopen = function() {
    // Web Socket is connected. You can send data by send() method.
    ws.send("message to send"); ....
  };
  ws.onmessage = function (evt) { var received_msg = evt.data; ... };
  ws.onclose = function() { ... }; // websocket is closed.
} else {
  // the browser doesn't support WebSocket.
}

그렇다면 Comet은 어떻게 될까요? 글쎄요... Comet은 크로스브라우저를 위한 솔루션으로 남게될 가능성이 큽니다. 어찌됐건 매우 흥분되는 일이 아닐 수 없습니다.

Comments

아래에 준비된 문제는 아주 간단합니다. 자신이 사용하는 또는 선호하는 언어를 사용하여 최대한 빠르게 우아하면서도 미려한 코드를 작성해보세요. 제한 시간은 10 분입니다. 시간이 초과된 사람은 루저입니다. 아마도 확실히 분발해야 할 것입니다.

현재 시간을 확인하세요. 지금부터 시작합니다.

당신은 운세 카드를 여러사람에게 배부하는 프로그램을 작성 중입니다.
당신은 사람 수 별로 카드를 나누어주는 함수를 작성해야 합니다.
다음 예제를 잘 읽고 모든 조건을 만족하는 함수를 작성하세요.

함수는 아래처럼 2개의 인자를 받습니다.

3, "123123123"

첫 번째 인자인 3은 플레이어의 수를 나타냅니다. "123123123"은 카드의 시퀀스를 나타냅니다. 플레이어는 다음과 같이 카드를 나누어 가져야합니다.

{"111","222","333"}

함수는 위치 값을 반환해야 합니다.

"111"은 첫 번째 플레이어가 받는 카드입니다.
"222"는 두 번째 플레이어가 받는 카드입니다.
"333"은 세 번째 플레이어가 받는 카드입니다.

그러나 다음과 같은 경우도있습니다. 모든 플레이어는 동등하게 카드를 나누어 가져야합니다.

4, "123123123"

이 경우, 당신의 프로그램은

{"12","23","31","12"}

를 반환해야 합니다.

{"123","23","31","12"} 는 안됩니다.

여기에 여러가지 예제가 있습니다.

예1)

6, "012345012345012345"
Returns: {"000", "111", "222", "333", "444", "555" }

예2)

4, "111122223333"
Returns: {"123", "123", "123", "123" }

예3)

1, "012345012345012345"
Returns: {"012345012345012345" }

예4)

6, "01234"
Returns: {"", "", "", "", "", "" }

예5)

2, ""
Returns: {"", "" }

끝으로, 가급적이면 아래와 같은 형식으로 통일해 주세요.

Class:          Cards
Method:         deal
Parameters:       int, String
Returns:         String[]
Method signature: String[] deal(int numPlayers, String deck)

문제를 모두 푸셨다면 당신이 작성한 코드와 언어, 소요된 시간을 댓글로 달아주세요.

Comments

Google Labs에서는 Google에 방문하는 사용자의 데이터를 바탕으로 브라우저의 표시 영역을 시각화하고 자신의 사이트도 대입해 볼 수 있는 온라인 도구인 브라우저 사이즈(Browser Size) 서비스를 시작합니다.

이 서비스를 방문하면 샘플 페이지를 기반으로 브라우저의 가시 영역과 사용자의 점유율이 나타납니다. 현재 960픽셀이 점유율 90%에 달하는 것을 확인할 수 있습니다. 텍스트 상자에 원하는 URL을 입력하면 해당 웹 페이지가 대입되며, 마우스 포인터를 따라다니는 작은 상자는 해당 페이지를 일반적인 상태로 만든 영역이며 실제 링크를 작동시킬 수 있습니다. 그리고 상단의 회색 박스들을 클릭하여 오버레이의 투명도(Opacity)를 변경할 수 있습니다.

Comments