구글이 최근 획득한 특허에 따르면, 구글 스트리트 뷰에 광고가 포함될 듯 합니다. 구글이 2008년 7월에 출원한 이 특허는 온라인 지도에서 사용할 수 있는 광고 시스템에 관한 것입니다. 이 특허에서 구글은 건물, 포스터, 광고판을 인식하고 이들 대신 최신의 광고를 보여줄 보여줄 계획을 세웠습니다. 또한, 문제가 되지 않는 범위 내에서 광고를 경매할 계획도 가지고 있습니다.

구글이 제시한 사례를 보면, 극장 포스터를 새로운 정보로 대체합니다. 이 방법을 통해, 해당 극장은 스트리트 뷰의 이미지가 오래됐다해도, 극장의 포스터를 항상 최신 상영중인 작품으로 보여줄 수 있습니다.


(자세한 내용은 아래 링크에서 확인할 수 있습니다.)

Posted by 행복한고니 트랙백 0 : 댓글 1
구글 크롬에는 V8 디버거라는 자바스크립트 디버거도 있습니다만, 이번에 새롭게 크롬 개발툴 프로토콜(Chrome Dev Tools Protocol)이라는 것을 선보였습니다.
V8 디버거는 자바스크립트 디버깅만 할 수 있었고, 하나의 V8 가상 머신에서만 동작했었습니다. 사실 하나의 구글 크롬 인스턴스에는 렌더링 프로세스에 따라 한 개 이상의 V8 가상 머신이 존재할 수 있습니다. 게다가 브라우저 탭에서 URL을 가져오거나 DOM 트리를 탐색하고 수정하는 작업은 자바스크립트 만으로는 다룰 수 없습니다.
이러한 제약때문에 원격 디버거와 디버깅되는 프로세스간에 추가 정보를 주고받을 수 있는 크롬 개발툴 프로토콜을 만들었습니다. 크롬 개발툴 프로토콜은 현재의 V8 디버거 프로토콜을 비롯한 다른 디버깅 관련 프로토콜의 전송 수단으로도 사용할 수 있습니다.
이 프로토콜을 사용해서 만든 도구 중 하나가 바로 이클립스 기반의 디버거입니다.
원격 디버거에 대한 노력은 그 밖에도 많이 있습니다. 한가지 예로, 오페라 드래곤플라이의 디버깅 및 검사 아키텍쳐인 스코프 인터페이스를 들 수 있습니다. 파이어버그 역시 웹 디버그 프로토콜을 가지고 있으며, ActiveState 에서 사용하던 전통있는 DBGP도 있습니다.

from Google Chrome Eclipse Debugger

Posted by 행복한고니 트랙백 0 : 댓글 0
Microsoft의 Sameer Chabungbam씨가 아래 기능을 포함하고 있는 새로운 JScript 프로파일러에 대한 글을 작성하셨습니다:
  • JScript 함수의 성능 데이터를 두가지 방법으로 제공
    • 함수 View  - 모든 함수의 비계층적 목록
    • 호출 트리 View - 호출 흐름에 기반한 함수의 계층적 목록
  • 데이터를 파일로 내보내는 기능 지원
  • 익명 함수를 위해 추측된 이름 제공
  • 내장 JScript 함수 프로파일링
  • 다중 프로파일 보고서 지원
  • 페이지 탐색과 리프레시에 걸친 프로파일링 지원
사용자 삽입 이미지

한편 Eric Pascarello씨는 새로운 도구를 찾아  구글 크롬 디버거에 대한 자신의 경험을 글로 작성했습니다. 그는 다양한 명령어와 중단점 기능에 대해 상세히 기술했습니다.

from New Profilers and Debuggers in Google Chrome and IE
Posted by 행복한고니 트랙백 0 : 댓글 0
구글에서 몇가지 소식이 있습니다. 첫째는 Gears 0.3이 릴리스 되었다는 것입니다. Firefox3 를 지원합니다! Firefox 3 정식버전(6월 17일 예정)에 맞춰서 출시하려고 했다는군요. Gears와 같은 플러그인은 브라우저 내부에 깊이 다가갈 수 있으므로 베타판의 API 변경덕분에 날짜를 지키는 것이 큰 도전이었다고 합니다. 결국은 훌륭하게 수행해냈습니다.

Gears 0.3은 Firefox 3 지원 이외에도, 다음을 포함하고 있습니다:
그리고, Google I/O 세션들의 모든 동영상의 공개되었습니다.

Ajax와 Gears와 관련된 컨텐트들을 정리해두었습니다:

Gears

GWT

General Ajax



from Gears 0.3 Released, and Google I/O videos on Ajax related content available
Posted by 행복한고니 트랙백 0 : 댓글 0

Gears, 첫 돌을 맞다

2008.06.06 13:55 from [IT] Web Tech
Chris Prince 씨가 Gears가 첫 돌을 맞았다는 글을 작성하셨습니다. 지난해 Google Developer Day에서 런칭되었었는데, 1년뒤 Google I/O에 있게 되었습니다.

어제 Gears와 관련된 몇 개의 재밌는 소식이 있었습니다. 첫째는, MySpace가 Gears를 이용해 사용자들이 MySpace 메시지를 검색할 수 있도록 했다는 것입니다.

이것은 "오프라인"만을 뜻하는 것이 아닌 Gears의 또 다른 사용법입니다. 사실, Chris Prince씨는 어제 사람들이 찾아볼 Gears의 프로토타입과 예제들을 보여주었습니다. 거기에는 아래와 같은 흥미있는 것들이 있었습니다:
  • 멀티파일 업로드: File System API를 사용해서, Chirs씨가 멀티파일 업로드를 시연했습니다. 여러개의 파일을 선택하면, 끝입니다!
  • 파일업로드 이어하기: 그는 그 뒤 YouTube 예제를 보여주었습니다. 이 예제는 다중 파일 업로드와 업로드 상태 보기를 포함하고 있으며, 또한 Blog API와 HttpRequest를 기반으로 작성된 ResumableRequest를 이용해 접속이 끊긴 후 파일 업로드를 재개해 0% 부터 시작하지 않는 예제를 보여주었습니다.
  • 주변지역을 찾아보세요! 다음 데모에서 Chris 씨가 맥주 마실 곳을 찾았고, 결과로 Moscone Center 주변의 장소가 나왔습니다. 이 예제는 여러분의 위치를 알기 위해 GPS, Wifi IDs, Cell IDs, IP 주소를 사용하는 Geolocation API를 사용했습니다.
  • 알림기능: Windows 토스터나 Mac의 Growl을 좋아하세요? Chris씨가 알림기능의 예를 보여주셨습니다
사용자 삽입 이미지

from Gears turns one; Old enough to power MySpace message search on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0
GWT 1.5 의 RC 버전이 출시되었습니다. 1.5 릴리스는 Java 5 지원을 비롯 변화가 많은 것 같습니다.
GWT의 이전 릴리스부터, 우리는 여러분이 사용자에게 집중하고 여러 브라우저의 괴상함과 다른 Ajax의 장애물들에 대한 상당한 걱정을 멈추는 것이 가능하다는 것을 보여준 많은 양의 정말 훌륭한 응용프로그램들을 보아왔습니다. 우리가 본 것들에 고무되어, 우리는 개발자들이 사용자들이 즐길 웹 응용프로그램을 작성하는데 자신들이 기존에 사용하던 도구를 사용하도록 하려는 작업에 계속 집중했습니다. GWT 1.5에는 이러한 노력이 포함되어있으며, 더 나아가 새로운 기능과 150개가 넘는 버그 수정도 들어있습니다. 그리고, 모든 GWT 릴리스들과 마찬가지로, 으뜸가는 이점은 업그레이드하고 재컴파일만 하면 되는 것입니다.
Dion씨가 잠시 사용해본 바로는 꽤 재밌다고 합니다. 주요 기능은 어떤 것이 있을까요?

새로운 컴파일러 최적화로 성능 개선
이번 릴리스를 통해 개발자가 직접 짜는 코드보다 GWT의 컴파일러가 생성하는 코드가 더 빠르다고 합니다. 어떻게 그게 가능할까요?  새 컴파일러의 여러 최적화를 통해 효율적인 인라인 메소드 호출이 심지어 직접적이지 않는 방법을 통해서도 가능해졌습니다. 다시 말하자면, 거대한 코드 기반을 유지하기 위해 필수적인 훌륭한 추상화와 명확한 설계가 컴파일 결과물에 고스란히 녹아있으며, 동시에 사용자들은 가능한 가장 빠른 응용프로그램을 경험할 수 있습니다. 반면에, 여러분이 직접 JavaScript를 작성한다면, 좋은 코드와 빠른 코드 중에서 선택을 해야할 것입니다. 그리고, 응용프로그램이 일정 규모가 되면 유지보수성 때문에 두번째 안(빠른 코드)을 선택할 수는 없게될 것입니다. GWT 1.5를 이용하면, 타협하지 않아도 됩니다; 그냥 좋은 코드를 작성하면 컴파일러가 그것을 빠른 코드로 바꿔줍니다.

JavaScript Overlay Types
이것은 GWT의 JavaScript 기반 레이어와의 상호운용성을 개선합니다. “Overlay type”은 우리가 추가적인 런타임 비용없이 스트롱 타입인 Java 인스턴스로서의 JavaScript 객체를 만드는 능력을 기술하는데 사용하는 새 용어입니다. Overlay type은 직접 작성한 JavaScript 라이브러리와의 소단위(fine-grained) 상호운용성 제공을 용이하게 할 뿐만 아니라, JSON 구조체가 GWT 코드에 직접 접근할 수 있게 하는 최적화된 방법을 제공합니다.

고성능 DOM API
GWT 1.5 까지, 우리는 위젯 레벨의 API에 거의 집중해왔고, overlay type(윗글 참고)이 나타나기 전까지, 직접적인 DOM 프로그래밍은 특별히 편리하진 않았습니다. GWT 1.5는 완전히 새로운 DOM API로 "편리함"을 넘어 "세련됨"으로 가고 있습니다. 이 새로운 DOM API는 DOM 전문가들의 편리함과 런타임 부하로부터의 자유를 주는 타입 안정적인 저수준 DOM 프로그래밍을 가능하게 합니다.

기본 시각 테마
몇 개의 기본 시각 테마가 기본적으로 가능해져서, 개발자들은 박스를 벗어난 매력적인 UI를 가지게 되었고, CSS로 자신들의 커스텀 스타일을 작성하는데 있어 좋은 출발점을 가지게 되었습니다.

Google I/O에서 가까운 미래의 온라인을 보여주는 멋진 대화를 보았습니다(이에 대해서는 곧 포스팅할 예정이라고 합니다). 지금은 1.5 버전을 한번 써보세요.

from GWT 1.5 Release Candidate Announced on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0
사용자 삽입 이미지
워드프레스 팀에서 어마어마한 작업을 하고 있다고 합니다. 이미 꽤 진행이 된 것 같은데, Google Gears를 이용해서 워드프레스가 오프라인에서도 동작하도록 하고 있답니다.

James 씨의 글에 따르면 이와 같은 Gears 지원이 몇몇 기쁜 선물을 가져다 줄 것이라고 합니다. 예를 들면, 남아프리카처럼 속도가 좋지 않은 곳에서는 상당한 속도 향상 효과를 볼 수 있다는 것이 그의 주장입니다(우리나라 상황과는 별 상관없겠네요.. 남아프리카라니...).

Dion씨는 이 같은 움직임에 대해서 Gears팀을 자랑스러워하는 한편, Gears가 오프라인만이 아닌 그 이상이라고 말했습니다. Gears는 웹 개발 모델의 간극을 채우기 위해 노력 중이고, HTML5 기능을 브라우저에서 사용할 수 있도록 하고 있다고 합니다. 그 외에도 재밌는 요소는 많죠. 내장 데이터베이스, 로컬 서버 스토리지, 데스크톱 API 등등.

뭐... 여하튼 재밌는 소식이네요. 국내에선 어디서 가장 먼저 Gears를 도입하게 될지 기대됩니다.

from Speed Up! with Wordpress and Gears on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0
Google에서 또 일을 저지른 것 같습니다(물론, 좋은 의미입니다). 간단히 본문을 요약하자면, Prototype, jQuery등의 주요 Ajax 프레임웍을 자기네들이 호스팅해서 전세계 개발자들에게 제공하겠다는 것입니다.

버전관리, 버그패치, 트래픽 다 감당하겠다는 거죠. 심지어 오래된 버전까지 그냥 끌어다 쓸 수 있으니 속도만 보장된다면(본문에는 세계 전역에 분포된 CDN을 사용하므로 빠를 것이라고는 합니다만..), 정말 간편하게 사용할 수 있을 것 같습니다. 아직 관련 소식을 다른 곳에선 들은 적이 없네요. 제가 보기엔 꽤 큰 사건임에 분명해보이는데요. :)
사용자 삽입 이미지
________________
Google에서 Prototype, Script.aculo.us, jQuery, Dojo, MooTools와 같은 유명 프레임웍들을 사용하는 Ajax 응용프로그램을 만들 수 있는 Google AJAX Libraries API발표했습니다.

응용프로그램을 작성할 때마다 매번 파일을 다운로드 받아서 설치하기를 반복하실텐데요, 글을 쓴 Dion씨는 무려 자신의 응용프로그램에서 33개의 prototype.js 복사본을 사용하고 있다고 합니다. 사이트가 달라질 때마다 매번 다운로드 받게 되는거죠. 얼마나 큰 낭비입니까!

또한, Steve Souder씨는 성능면에서 우리가 이러한 라이브러리를 제공함에 있어 얼마나 잘못하고 있는지 지적한 바 있습니다. 개발자로서 우리는 캐싱을 정확하게 해서 파일이 필요할 때만 다운로드되도록 해야합니다. 또한 gzip 압축이 가능한 브라우저라면 압축 전송을 해야합니다. 아, 조금이라도 용량을 줄이기 위해 최소화 버전도 사용해야 할 것입니다. 파일의 버전 관리도 제대로 해야죠. 아니면, 수없이 많은, 때론 파일 끝에 조금씩 입맛에 맞게 수정을 가한, 버전이 없는 jquery.js 파일을 발견하고, 캐시는 전혀 제대로 설정되어있지 않아 아무런 이유도 없이 파일을 항상 전송할 겁니다.

Dion씨는 Google에 입사해서 이런 것들을 도울 수 있을 것 같다고 생각했다고 합니다. 우리가 이런 파일들을 호스팅하면 어떨까? 모든 사람이 바로 이런 혜택을 받게 되었겠죠:
  • 제대로 된 캐싱, Google이 한번만 작업하면 개발자들이 할 일은 아무것도 없음
  • Gzip 압축
  • 최소화 버전 제공
  • Google에 의해 호스팅되는 파일들은 세계 전역에 걸쳐있는 분산 CDN에서 제공되므로, 파일은 사용자들에게 "근접"해있음.
  • 서버가 빠름
  • 똑같은 URL을 사용하므로, 응용프로그램의 상당 부분이 Google의 인프라를 사용한다면, 누군가 여러분의 응용프로그램에 접근할 때 그 파일은 이미 로딩되어있을 것!
  • 여러분이 보내고 받는 헤더와 관련된 미묘한 성능(그리고 보안) 문제 해결. 특정 도메인을 사용하고 있으므로(주의: google.com은 아닙니다!), 쿠키나 다른 쓸데없는 헤더가 전송되지 않으므로 귀중한 트래픽 절약
이게 Google이 AJAX Libraries API를 출시한 이유입니다. 몇 개의 유명 오픈소스 프레임웍 진영과 대화한 결과 그들은 모두 이 아이디어를 흥미로워했습니다. 그래서 그들과 이 작업을 시작했으며, 이제 여러분은 Google의 서버에서 그들의 훌륭한 작업물에 접근할 수 있습니다.

세부사항

라이브러리에는 두 가지 방법으로 접근할 수 있고, 둘 다 라이브러리를 호스팅하는 고통 - 정확하게는 캐시 헤더를 설정하고 최근 버그 패치들을 적용하도록 꾸준히 업데이트 하는 일 등 - 을 덜어주는 방법입니다.

첫번째 방법은 간단하게 표준 <script src="..."> 태그를 이용해서 스크립트에 접근하는 방법입니다.

예를 들면, Prototype 1.6.0.2 버전을 읽어들이려면 HTML에 아래와 같은 코드를 입력하면 됩니다.
[code:js]
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script>
두번째 방법은 Google AJAX API 로더의 google.load() 메소드를 이용하는 것입니다.

아래는 간단한 검색 매시업을 위해 jQuery를 읽고 사용하는데에 해당 기술을 사용한 예제입니다.
[code:js]
<script src="http://www.google.com/jsapi"></script>
<script>
  // Load jQuery
  google.load("jquery", "1");
 
  // on page load complete, fire off a jQuery json-p query
  // against Google web search
  google.setOnLoadCallback(function() {
    $.getJSON("http://ajax.googleapis.com/ajax/services/search/web?q=google&;v=1.0&;callback=?",
 
      // on search completion, process the results
      function (data) {
        if (data.responseDate.results &&
            data.responseDate.results.length>0) {
          renderResults(data.responseDate.results);
        }
      });
    });
</script>
아마 사용한 버전이 그냥 "1"라는 것을 알아차리셨을 것입니다. 이는 스마트 버저닝 기능으로, 여러분의 응용프로그램에서 필요한 앞자리만 지정할 수 있도록 하고 있습니다. 버전 필드를 입력하지 않음으로써, 필드에 와일드 카드를 사용한 것입니다. 간단히, 이런 버전들을 생각해보세요: 1.9.1, 1.8.4, 1.9.2

"1.8.2"라는 버전을 지정하면 정확한 버전이 선택됩니다. 이는 사용할 버전 전체를 지정했기 때문입니다. "1.8"과 같이 버전을 지정하면 1.8 브랜치에서 가장 높은 릴리스 버전인 1.8.4 가 선택됩니다. 같은 이유로, "1"을 요청하면, 실제로 읽히는 버전은 "1.9.1" 입니다.

아셔야 할 것은 이러한 버전관리 시맨틱이 google.load를 사용할 때와 직접 script url을 사용할 때 똑같은 방식으로 작동한다는 것입니다.

기본적으로, 로더가 되돌려주는 JavaScript는, 지원되는 버전이 있다면, 최소화 되어있습니다. 그러므로, 위의 예제는 jQuery의 최소화된 버전을 반환할 것입니다. 만약 최소화 되지 않은 JavaScript 파일을 원하신다면 "uncompress" 파라미터를 추가하시면 됩니다.
[code:js]
google.load("jquery", "1.2", {uncompressed:true});
오늘은 라이브러리들의 현재 버전으로 시작하지만, 앞으로는 현재부터의 모든 버전을 제공하겠다고 합니다.

현재 지원하는 라이브러리의 전체 목록은, 문서 부분을 보시기 바랍니다.

Dion씨가 자신들이 작업한 것에 대해 두 장의 짧은 슬라이드를 보여주셨습니다.


미래

이것은 단지 시작일 뿐입니다. Google에서는 유용하게 사용할 수 있도록 보다 많은 라이브러리들을 추가하려고 합니다. 또한, 약간의 관심만 있으시면 어떻게 이들이 더 나아갈 수 있는지 아시게 될 것입니다.

이것이 잘 사용되면 다음번에는 이러한 라이브러리들을 자동으로 읽어들일 수 있도록 브라우저 벤더들과 작업할 것이라고 합니다. 그러면, 해당 URL에 접근했을 때, 자동으로 라이브러리를 읽어들일 수 있게 됩니다. 심지어는 로컬에 있는 특별한 JIT된 것까지도요. 그러므로, 네트웍은 전혀 사용하지 않게 되죠! 또한, 브라우저는 이 서비스가 가능한 IP 주소를 가지고 있을 수 있어 DNS 탐색도 하지 않게됩니다. 오래 유지되는 JavaScript 라이브러리를 위한 브라우저 캐시도 이런 URL을 사용합니다.

이러한 것들이 일어난다면 웹 개발자들에게는 어떤 의미일까요? 항상 표준 라이브러리를 다시 다운로드받아야 했던 늘상 있어왔던 부담에서 벗어날 수 있습니다. 다른 어떤 플랫폼에서 이런 것이 가능했을까요? Java 응용프로그램을 실행할 때마다 매번 JRE를 다운로드 받아야 한다고 생각해보세요! 만약 그런 부담을 덜 수 있다면, 필요한 기능을 만드는데 보다 많은 시간을 투자할 수 있고, 실제 다운로드 크기에 대해서 고민할 시간은 줄일 수 있습니다.

감사의 말씀
(이 부분은 번역 생략하겠습니다. ^^;;)

from Announcing AJAX Libraries API: Speed up your Ajax apps with Google's infrastructure on Ajaxian
Posted by 행복한고니 트랙백 5 : 댓글 4

Doctype에 대해서 또 다른 글이 올라왔습니다. Dion씨는 이 프로젝트에 대해서 꽤 흥분하고 있는 듯 보입니다.

Doctype에는 주장을 뒷받침 하기위한 여러 테스트들이 있습니다. 별로 생각하지 않아도 될만큼 간단합니다. 테스트들은 총체적으로 보여집니다만, 테스트는 Google Code 프로젝트에 있으므로 직접 접근하실 수도 있습니다.

document 테스트를 한번 살펴보세요, 그러면 Mark씨가 우리에게 튼튼한 기반을 제공하기 위해 이 일에 얼마나 많은 작업을 했는지 알게 될 것입니다.

또한 테스트가 goog.* 라는 JavaScript 라이브러리들을 사용하고 있는 것을 알 수 있습니다.

Simon Willison씨가 이미 다음과 같이 몇가지 재밌는 점을 발견하셨습니다:

Goog 라이브러리는사용자 환경에 설치된 iPhoto의 버전을 찾아내는 코드를 포함합니다. 그 코드는 Mac.com의 Gallery RSS 피드를 리버스 엔지니어링한 것을 기반으로 합니다.

수많은 훌륭한 코드들이 있습니다. 아무거나 한 번 시도해보세요. 그리고 알아낸 것을 알려주세요!

from Doctype: You want tests with your copy? on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

Mark Pilgrim씨가 오픈 백과사전이자 레퍼런스 라이브러리인 Google Doctype을 릴리스했습니다. 웹 개발자들에 의해, 웹 개발자들을 위해 쓰여지는 이 문서들은 웹 보안, JavaScript DOM 다루기, CSS 팁과 트릭 등에 대해서 다루고 있습니다.

레퍼런스 부분에는 크로스 브라우저와 크로스 플랫폼 호환성을 확인하기 위한 계속 추가되는 테스트 케이스 라이브러리도 있습니다.

이것은 오픈소스이자 오픈 라이센스(Creativce Commons)를 표방하는 야심찬 프로젝트의 시작일뿐입니다. 개발자들이라면 참여해서 이 문서를 성장시키는 가치 있는 데이터를 추가하는 것도 좋을 것 같습니다.

Dion씨가 Mark씨를 만났던 모양입니다. 이 프로젝트에 대한 Mark씨의 말씀을 들어보세요:


from Google Doctype: Documenting the Open Web on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

오늘은 GWT팀의 Bruce Johnson씨와 GWT 1.5에 대한 얘기를 나누어보았습니다. 그는 오래 기다려왔던 Java 5 에 대한 지원, 성능 개선 등과 같은 새로운 기능에 대해서 얘기했습니다.

응용프로그램을 새로운 GWT 1.5 컴파일러를 통해서 실행하고 "공짜"로 더 빨리 동작하는 응용프로그램을 얻을 수 있으니 아주 좋습니다.

Ajax Pioneer: Bruce Johnson of GWT from Dion Almaer on Vimeo.

다른 인터뷰들...

from Ajax Pioneer Week: Bruce Johnson of GWT on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

오는 5월 28-29일에 걸쳐 구글의 연중 이벤트 중 최대 행사인 Google I/O라는 행사가 있다고 합니다. 글 쓰신 Dion씨와 Ben씨는 Ajax와 JavaScript 트랙에 참여하시고, 아울러 이 트랙에는 GWT 팀의 Bruce Johnson, AJAX API 팀의 Mark Lucovsky, Dojo의 Alex Russell 등 쟁쟁하신 분들이 참여한다고 합니다. API, Social, 지도, 모바일 등을 다루는 다른 트랙들도 있고요.

Ajaxian 커뮤니티가 참여했으면 좋을 것 같아 문의해봤더니 10개의 티켓을 받았다고 합니다. 메일이나 Twitter를 이용해 신청해달라고 하는데, 국내에선 아무래도 무리겠죠? ^^;;

끝으로, 콩코드의 비행(Flight of the Conchords)라는 분들이 이 행사에서 공연을 하나본데, 원래 있는 가수인지 아니면 구글 내부의 동호회인지는 모르겠습니다. 동영상을 보면 아시겠지만 아마도 노래 제목이 It's Business Time 인 것 같군요.



from It’s Business Time: Free Passes to Google I/O on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0
Dion Almaer 씨가 예전에 Google AJAX 언어 API를 이용한 번역 북마클릿에 대한 글을 쓴 적이 있습니다:
Ajax 언어 API를 개발자들이 알게 되었다는 것은 정말 운이 좋은 일이었다고 생각합니다. 덕분에 우리는 번역역 걱정을 하지 않을 수 있게 되었습니다. 이제 우리는 API를 사용하여 Goolge 백엔드를 통해 번역 작업을 할 수 있습니다.

저는 최근에 급하게 번역을 해야할 일이 몇 번 있었습니다. 프랑스어와 스페인어로 된 짧은 Twitter 메시지를 영어로 옮겨야 했습니다. 저는 외국 포럼에 나온 몇몇 기술적 이슈에 대한 답이 있었습니다.

그래서, 외국어를 선택하고 북마크를 클릭하면 작은 창이 떠서 영어로 번역해주는 번역 북마클릿을 만들어보기로 했습니다. 자동 번역이 완벽해지려면 한참 멀었지만, 대부분의 경우 요점 정도는 쉽게 알 수 있을 것입니다(책 한 권을 통째로 번역하려고 하진 않을테니까요).

아래는 이 북마클릿을 만든 방법입니다:

소스

우선, 북마클릿이 될 JavaScript 소스를 작성했습니다. 코드에는 몇가지 단계가 있습니다. 첫째로, 우리는 작업을 시작하고 Ajax 언어 API를 호출하고, 번역을 거쳐 우리가 원하는 언어를 얻을 수 있는 메소드를 작성합니다. 영어를 원하지 않는다면 언어 코드를 변경하면 됩니다.

[code:js]
if (!window['apiLoaded']) {
  window.apiLoaded = function() {
    var language = "en";
    var text = window.getSelection().toString();
    if (text) {
      google.load("language", "1", { "callback" : function() {
        google.language.detect(text, function(dresult) {
          if (!dresult.error && dresult.language) {
            google.language.translate(text, dresult.language, language, function(tresult) {
              if (tresult.translation) {
                translationWindow(tresult, dresult);
              } else {
                alert('No translation found for "' + text + '" guessing the language: ' + dresult.language);
              }
            });
          }
        });
      }});
    }
  };
}

그 뒤에는 결과를 window에 표시할 수 있는 메소드를 작성합니다. 저는 가능하면 Prototype UI Window 객체를 사용했고, 그렇지 않으면 익숙한 alert() 를 사용했습니다:

[code:js]
if (!window['translationWindow']) {
  window.translationWindow = function(tresult, dresult) {
    if (window['UI']) {
      new UI.Window({theme:  "black_hud",
                   shadow: true,
                   width:  350,
                   height: 100}).setContent("<div style='padding:6px'>" + tresult.translation + "</div>")
                   .setHeader("English Translation")
                   .setFooter("Language detected: " + dresult.language)
                   .center({top: 20}).show();
    } else {
      alert(tresult.translation + " [lang = " + dresult.language + "]");
    }
  }
}

다음에는, Prototype UI window 코드를 읽고 DOM에 리소스를 동적으로 추가하는 방식으로 함께 사용하는 CSS 리소스를 읽어들였습니다:

[code:js]
if (!window['UI']) {
  var pw = document.createElement('script');
  pw.src = 'http://almaer.com/downloads/protowindow/protowin.js';
  pw.type = "text/javascript";
  document.getElementsByTagName('body')[0].appendChild(pw);
  var pwdefault = document.createElement('link');
  pwdefault.setAttribute('rel', 'stylesheet');
  pwdefault.setAttribute('type', 'text/css');
  pwdefault.setAttribute('href', 'http://almaer.com/downloads/protowindow/themes/window.css');
  document.getElementsByTagName('body')[0].appendChild(pwdefault);
  var pwblack = document.createElement('link');
  pwblack.setAttribute('rel', 'stylesheet');
  pwblack.setAttribute('type', 'text/css');
  pwblack.setAttribute('href', 'http://almaer.com/downloads/protowindow/themes/black_hud.css');
  document.getElementsByTagName('body')[0].appendChild(pwblack);
}

마지막으로, Google API 로더를 읽어들여서 ?callback=apiLoaded을 통해 동적 로딩 옵션을 사용합니다. 이는 우리가 처음에 봤던 메인 드라이버를 시작하게 합니다. 이미 로드되었으면 직접 호출할 수 있습니다(같은 페이지에서 다중 번역을 하기 위함).

[code:js]
if (!window['google']) {
  var s = document.createElement('script');
  s.src = 'http://www.google.com/jsapi?callback=apiLoaded';
  s.type = "text/javascript";
  document.getElementsByTagName('body')[0].appendChild(s);
} else {
  apiLoaded();
};

"컴파일"

이것은 가공 전 형태인데, 우리가 필요한 것은 영어를 원하면 바로 사용할 수 있는 북마클릿 형태입니다. 이를 위해 저는 John Grubber 씨의 makebookmarklet Perl 스크립트를 사용해 변환을 했습니다.

서버

Prototype UI 코드는 서버에 있어야 하므로, Prototype + Window JavaScript의 조합된 파일을 포함한 가볍게 만든 버전과 한가지 테마의 CSS 세트를 서버에 넣었습니다.

작동

제가 얘기한 것에 대해 믿음이 안가세요? 실제 동작하는 것을 한번 보세요:


또 다른 번역 관련 응용프로그램입니다. 웹 기반 IRC 응용프로그램인 Mibbit 에는, 대화방에서 자동 번역을 해주는 "번역" 기능이 있습니다.
사용자 삽입 이미지

from Immediate Translation and Mibbit on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0
from What does Google App Engine mean for Ajax developers? on Ajaxian

Google App Engine 엔진이 나오길 고대했는데, 비록 프리뷰 릴리스이긴 하지만 나와주었습니다.

Google App Engine이 뭘까요?

Google App Engine은 Google의 기반 위에서 당신의 웹 응용프로그램을 실행할 수 있도록 합니다. App Engine 응용프로그램은 작성하기 쉽고, 유지보수하기도 쉽고, 트래픽과 데이터 저장공간의 증가에 따른 규모 변경도 쉽습니다. App Engine을 이용하면 유지보수해야 할 서버가 없습니다: 응용프로그램을 업로드하면 사용자에게 서비스할 준비가 끝난 것입니다.

appspot.com의 무료 도메인을 이용하거나 Google Apps을 통한 독립 도메인을 이용해서 서비스할 수도 있습니다. 응용프로그램을 모두 공개하거나 원하는 사용자에 대한 접근 제한을 하는 방법으로 공유할 수도 있습니다.

App Engine은 시작할 때 아무 비용도 들지 않습니다. 무료 계정에 가입하면, 요금이나 의무없이 세계에 보여줄 응용프로그램을 개발하고 알릴 수 있습니다. 무료 계정은 500MB의 공간을 주고 한달 5백만 페이지 뷰에 충분한 CPU와 대역폭을 제공합니다.

Google App Engine의 프리뷰 릴리스 중에는 무료 계정만 가능합니다. 조만간, 추가 자원을 구입할 수 있도록 할 것입니다.

Google App Engine에는 분명 한계가 있습니다. EC2 같은 Provisioning System이 아니라 샌드 박스처럼 한정된 권한과 공간만을 응용프로그램에 제공합니다. 하지만, 분명 어떤 이들에게는 괜찮은 방법이 될 수 있습니다.

글쓴이에게 서버 공간이 필요했던 작은 단위의 응용프로그램이 몇개 있었는데, 이럴 때 Google App Engine이 좋은 대안이 될 수 있을 것이라고 생각합니다. 설정의 번거로움도, 트래픽 비용도 없죠. 그냥 만들고 실행하기만 하면 됩니다. Google App Engine을 이용하면 서비스와 클라이언트측 환경에 더 집중할 수 있습니다.

물론,Google App Engine가 Ajax 응용프로그램에서 할 수 없는 것까지 제공해주지는 않지만, 간단한 명령으로도 이러한 서비스들을 시작할 수 있게 해줍니다. 글쓴이는 이것이 배치(DEPLOY)의 세계로 가는 첫걸음이라고 보고 있습니다. Heroku 같이 다른 장단점을 가진 다른 서비스들도 있습니다.

랭귀지 전쟁으로 돌아가지만 않는다면 옵션으로 제공되는 서버측 JavaScript를 보는 것도 즐거울 것 같습니다.

Posted by 행복한고니 트랙백 0 : 댓글 0

티스토리 툴바