VMWare의 Greg Brown씨가 최근 1년간의 연구 성과를 발표했습니다; Java를 위한 새로운 GUI 툴킷인 Pivot이 그것입니다.
사용자 삽입 이미지
전통적인 Java 애플릿과 Web이 콘크리트와 땅콩 버터와 같이 어울렸다면 출시될 개정된 Java 플러그인은 Java 기반 GUI 툴킷에 웹 진영들이 흥미를 가질만한 기회를 주었습니다.

Pivot의 소스코드가 작성중이지만, 클래스들을 슬쩍 본 바로는 구조가 Java 내장 Swing GUI 툴킷과 매우 닮았습니다. 하지만, Swing의 거친 경계선 대부분은 부드럽게 처리되었습니다. 오래된 Swing 개발자로서의 Ben씨가 보기엔 Swing++ 이라 해도 될 것 같다고 합니다.

또다른 Java GUI 툴킷으로는 애플릿 개발자들을 대상으로한 Thinlet이 있다고 합니다(새 버전은 아직 개발중입니다).

from Pivot: Swing++ as New Java-based RIA Platform?
TAG Java, UI
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

Joshua Marinacci 씨가 Java SE 6 update 10 이 Flash가 지원하는 똑같은 crossdomain.xml 을 어떻게 지원하는지, 또 그것이 어떻게 JNLP와 결합해 권한설정 대화창없이 Apple 매시업을 하게 하는지 상세하게 설명했습니다.
샌드박스로 알려진 애플릿 보안 모델은 애플릿이 그들이 읽혀진 웹서버에만 접근할 수 있도록 합니다. 애플릿은 인증받지 않으면 어디에도 접속할 수 없습니다. 인증은 샌드박스 내부의 허용된 것 이외의 것에 접근할 필요가 있을 때는 매우 좋습니다만, 두가지 문제가 있습니다: 사용자는 애플릿에 대한 보기 싫은 경고 대화창을 보게 되고, 애플릿은 사용자의 컴퓨터에 완전히 접근할 수 있습니다. 의도한 동작이 다른 서버에 있는 웹서비스와 통신하고 싶은 것뿐이라면 완전 접근은 과잉 권한입니다. 확실히 샌드박스와 완전접근 사이의 중간지대가 있을까요? 자, 이제는 있습니다.
중요한 것은 새로운 JNLP 버전을 묶는 하위 호환성있는 방법을 제공하는 것입니다.
[code:xml]
<applet code="photostrip.Applet"
        archive="http://projects.joshy.org/demos/PhotoStrip/webstart/PhotoStrip.jar"
        width="400" height="200"
       >
    <param name="jnlp_href" value="http://projects.joshy.org/demos/PhotoStrip/photostrip.jnlp">
    <param name="flickruser" value="31706743@N00"/>
    <param name="size" value="100"/>
    <param name="cols" value="4"/>
    <param name="rows" value="2"/>
</param></applet>
이제 JNLP 파일이 인증받지 않은 jar 파일을 가리킵니다:
[code:xml]
<jnlp spec="1.0+" codebase="" href="">
    <information>
        <title>PhotoStrip</title>
        <vendor>Joshua Marinacci</vendor>
        <offline -allowed />
    </information>
    <resources>
        <j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se" />
        <jar href="unsigned/PhotoStrip.jar" main="true" />
        <!-- Application Resources -->
    </resources>
  <applet -desc
      name="PhotoStrip"
      main-class="photostrip.Applet"
      width="400"
      height="200">
  </applet>
</jnlp>
주의: 개방된 크로스 도메인과 관련된 보안 이슈에 주의하셔야 합니다.

from crossdomain.xml, Java, and JNLP on Ajaxian
TAG Java
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

Spring JavaScript 모듈을 탑재한 Spring Web Flow 2.0이 릴리스 되었습니다.

다음은 Ajax 이벤트를 호출하는 onclick wrapper 예제입니다:

[code:js]
<a id="prevResultsLink" href="search?searchString=${searchCriteria.searchString}&page=${searchCriteria.page - 1}">Previous Results</a>
<script type="text/javascript">
    Spring.addDecoration(new Spring.AjaxEventDecoration({
        elementId: "prevResultsLink",
        event: "onclick",
        params: { fragments: "body" }
    }));
</script>
Dion씨가 SpringSource의 Keith Donald씨와 Jeremy Grelle씨를 만나 Web 티어에서 진행되는 것들에 대해 이야기를 나누었다고 합니다. 코어 웹 프레임웍(Sprint MVC)에서 Spring Webflow 컨트롤러 엔진으로, 새로운 Spring JS 모듈로 여러 부분이 이동하고 있다고 합니다.

Spring JS를 이용하면 보다 쉽게 Java 만으로 멋진 Ajax 동작들을 작성할 수 있다고 합니다. 따로 사용할 수도 있고, 당연한 말이지만 Spring 프레임웍과도 잘 연동된다고 합니다.

from Spring WebFlow 2.0; JavaScript Module Released on Ajaxian

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

댓글을 달아 주세요

아래는 Ajaxian에 있는 글을 그대로 번역했습니다. 즉, "저"라고 하면 Dion씨인 것이고, "우리"라고 하면 Ben씨와 Dion씨입니다. 이 글을 보고 나니 더더욱 Wii 를 사고 싶어지네요. 그전엔 소년의 혼(?)이었다면 이번에는 개발자의 혼(?)으로요. ^-^
_________________________
Ben과 저는 JavaOne에서 Ajax의 새로운 점에 대한 프리젠테이션을 진행했습니다. 이 행사가 JavaOne이기 때문에 우리는 Java쪽 주제를 조금 더 다루었는데, 주제 중 하나가 웹 페이지 밖이나 브라우저 종료후에도 계속 애플릿를 실행할 있는 멋진 새 기능을 지원하는 Java Plugin 사용에 관한 것이었습니다. Java는 이제 "Java가 전체 브라우저를 종료"하던 문제를 일으키던 프로세스 내부 실행을 벗어났습니다.

어쨌든, 다시 데모 이야기를 하겠습니다. For some context, 지난해 JavaOne에서 우리는 스테이지에서 기타 히어로(Guitar Hero)를 시연했었는데, 이 때 어떤 식으로든 게임 콘솔을 사용해야겠다라고 생각했습니다. 올해에 컨트롤러를 사용하기로 결심했지만, 그 다짐은 콘솔대신 Wii가 되었습니다.

그 컨트롤러를 이용해서 웹 페이지를 컨트롤 할 수 있으면 끝내주지 않을까? 라고 생각했고, 작업을 시작했습니다. 블루투스를 통해 Wii 모트와 교신할 수 있는데, 우리는 그를 가능하게 해줄 스택이 필요했습니다. Java에는 블루투스 스택이 있었죠. 우리는 Java 스택과 교신할 애플릿을 구할 수 있었습니다. 흠.

다양한 스택을 테스트하는 것은 실제로 시간이 꽤 걸렸습니다. 결국 우리는 많은 Wii 해커들이 사용하는 Wiiuse라는 네이티브 시스템을 사용했습니다. Wiiusej라는 wrapper 라이브러리는 정확하게 우리가 필요로 하던 것이었습니다.

간단한 테스트 후에 리모트와 프로그램간 통신을 하는 응용프로그램이 만들어졌습니다. 메인 컨트롤러가 Wii 센서바에 있는 일련의 IR(적외선) 빛들을 감지하기 때문에, 적당한 IR 소스만 있으면 시스템을 시뮬레이션할 수 있습니다. 프리젠테이션 룸에서 무대를 비추던 커다란 빛은 센서바의 역할을 할만큼 충분히 강해서 우리는 그것을 사용할 필요가 없었습니다.

어쨌든, 다시 프로그램 얘기를 하죠. 우리는 리모트가 무엇을 하고 있는지 알려줄 상태 머신 역할을 할 Java 클래스를 작성했습니다. 그것은 움직임과 어떤 버튼이 눌렸는지, 장치가 얼마나 빨리 움직이는지 감지할 수 있었습니다. 이 데이터로 우리는 간단한 다트 게임을 작성했습니다. 상태 머신 Java 코드와 정보를 노출시키는 Applet wrapper로 프로그램의 Ajax 부분을 완료했습니다.

우리는 화면에 다트판을 그리고 JSObject를 통해 JavaScript가 Applet을 폴링하도록 했습니다(이것처럼 간단하게: document.nameofapplet.pollmethod()). 이벤트 드리븐 대신 폴링을 하긴 했지만, 다른 방식의 통신보다 더 안정적이었습니다. JavaScript 코드가 애플릿을 폴링할 때 리모트의 좌표 데이터를 포함한 데이터 구조체를 되돌려 받았습니다. 리모트의 움직임에 따라서 화면상의 다트 이미지를 이동시켰고, 발사하면 다트판을 향해 날아가는 다트의 애니메이션을 시작했습니다.

처음에는, 상당히 단순했습니다. 조준하고 쏘면 항상 그 자리에 정확히 맞습니다. 재밌는 게임은 아니었죠. 우리는 몇가지 간단한 물리법칙을 Ajax 게임에 추가하기로 하고, 던지는 속도(힘이 약하면 떨어집니다)와 경로(얼마나 일직선으로 던지는지)를 추가했습니다. 만약 던질 때 흔들렸다면 다트는 정확하게 날아가진 않습니다.

아래의 동영상이 프로그램의 데모입니다. 설명과 함께 소스코드도 포함하고 있으며 보다 자세한 사항을 볼 수 있습니다.

Wii Darts in Ajax from Dion Almaer on Vimeo.

from Wii Darts: Powering Ajax applications with Wii Controllers on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 1

댓글을 달아 주세요

  1. addr | edit/del | reply BlogIcon 리카르도 2008.05.15 01:42 신고

    ㅋㅋㅋㅋㅋ 안되는게 없네요
    보면볼수록 물건인것같습니다.

JavaScript의 한계는 어디까지일까요. Basic, Ruby, Smalltalk 를 구현한 데 이어 또 다른 언어를 구현했습니다.

John Resig 씨에 따르면, 일본의 Shibuya.JS 사용자 그룹에서 JavaScript로 JavaVM을 구현한 Orto [PDF, 일본어] 프로젝트를 진행하고 있다고 합니다. 보다 정확히 말하면 Java를 작성하고, bytecode로 컴파일한 뒤 Orto를 통해 실행해볼 수 있다는 것입니다(이 때 Orto에서 Java -> JavaScript로의 변환과정을 거칩니다).

생성되는 코드는 이런 형태로 사람이 읽을만한 모양은 아닙니다:
"java/lang/Thread 1316742099":function(){var orto333=orto245[0];
var orto336=orto350(orto333);
if(orto336.orto340!=orto310){orto223("java/lang/IllegalThreadStateException",null);
return ;
}
case 117:orto246[orto247-2]={high:(~orto246[orto247-2].high)
  &0xffffffff,low:(~orto246[orto247-2].low+1)&0xffffffff};
if(orto246[orto247-2].low==0){orto246[orto247-2].high++;
orto246[orto247-2].high&=0xffffffff;
orto246[orto247-2].low=0;
}break;

실행해볼 수 있는 예제로 테트리스가 있는데, 사람이 밀리는지 접속이 여의치 않네요.
Tetris

Orto에서 실행한 Tetris


다만, 몇 가지 부족한 부분도 있는데, 이를 테면 쓰레드 구현을 위해 setTimeout을 엄청나게 쓸 수 밖에 없었다와 같은 문제들입니다(JavaScript는 싱글스레드라서 어쩔 수 없는 문제입니다).

John Resig 씨의 블로그에 가보면 댓글에 iPhone에서도 작동했다는 얘기가 있습니다.

from Java in JavaScript from Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

from Java Plugin: The Kernel is Back on Ajaxian

Sun 사의 Ethan Nicholas 씨가 베타를 출시한 Java 6 update 10 에 대한 글을 썼습니다.

Java 진영에는 꽤 큰 상이 주어졌고, 백만년만에 처음으로 Java applet 에 큰 변화가 일어났습니다.

What was the pain again?

Java 프로그램은 일단 로드되고 실행되면, 보통은 부드럽게 잘 동작합니다. 최근의 Java Runtime Environments (JREs)는 안정적이고, 신뢰성있으며 또한 빠릅니다.

안타깝게도, "로드되고 실행"하는 부분이 필요이상으로 까다로웠습니다. 이런게 문제였죠:

  • 특히 웹 브라우저에서, JREs 탐지의 어려움
  • 새로운 JREs의 자동설치가 어려움
  • 너무 큰 다운로드 크기
  • 좋지 않은 콜드 스타트(cold start) 성능
  • Applet과 Web Start 프로그램간의 작은 중첩

Java 6u10 은 이러한 문제들을 해결하기 위해 만들어졌습니다. 공개된 API가 변경되지 않도록 조심하면서, 이런 문제를 해결할 수 있었습니다 - Java 7까지 기다릴 필요가 없이요!

해결책은 뭔데요?

Java Kernel

Java Kernel 은 Java 소프트웨어를 더 빠르게 로드하고 실행하기 위한 새 배포판입니다. 전체 JRE 대신, 사용자들은 가장 일반적으로 필요한 JRE 컴포넌트가 포함된 작은 설치파일("kernel")을 다운로드합니다. 추가 컴포넌트들은 필요할 때 다운로드하며, JRE는 백그라운드에서 남아있는 컴포넌트들을 다운로드하고 스스로를 재조립합니다.

현재 빌드에서, Swing 프로그램과 Java applet 의 보통 크기는 4-5MB 쯤됩니다. JRE 전체가 14.4MB 인 것과 비교됩니다.

Next-Generation Java Plug-In

Java 6u10은 당신이 Firefox 3 나 Internet Explorer를 사용한 만큼 오랫동안 기본으로 사용되었던 Java Plug-in의 새 구현물을 포함하고 있습니다. 차세대 플러그인은 한 개 이상의 분리된 프로세스로 브라우저 외부에서 애플릿을 실행합니다. 애플릿은 늘 그래왔듯이 웹 브라우저 창 내부에서 보여지겠지만 이는 서로 다른 JRE 버전을 사용하는 것이나, 커맨드 라인 인자, 다른 애플릿 실행 설정이 가능하다는 것을 의미합니다.
실행중인 웹 브라우저에 의해 제공되는 격리와 JRE -- 두 개의 매우 크고, 매우 복잡한 소프트웨어 -- 는 독립적인 프로세스 공간에서 각자의 신뢰성을 개선하고 애픗릿에 동등한 유연성을 부여하며 다른 Java 소프트웨어들이 누려왔듯 JRE 설정을 제어합니다.

애플릿이 Java Web Start 프로그램이 그러했듯 강력한 JRE 버전 선택 기능과 설정 기능을 지원하게 되었기 때문에, 두 종류의 프로그램이 같은 메커니즘을 사용하는 것은 당연합니다. Java Plug-in 은 이제 애플릿 설정이나 시작 옵션을 정하는데 Java Network Launching Protocol (JNLP) 파일을 사용할 수 있습니다. 조금 더 나아가면, 애플릿과 Web Start 프로그램을 같은 프로그램으로서 배포할 수도 있습니다. PersistanceServiceFileSaveService 같은 JNLP 서비스의 이점은 그대로 취하면서 말입니다.

새 Plug-in의 장점입니다:
  • 신뢰성 개선
  • JavaScript 통신 개선
  • 애플릿 별 JRE 커맨드 라인 인자 제어
  • 애플릿 별 JRE 메모리 설정, 최대 힙 크기 증가
  • JNLP 지원
  • 애플릿 별 JRE 버전 선택
  • Vista 지원 개선

새로운 plug-in에 대한 보다 자세한 정보는 릴리스 노트에서 확인할 수 있습니다.

Java Deployment Toolkit

Java 배치 툴킷은 Java Applet 이나 Java Web Start 프로그램을 배치합니다. Deployment
Toolkit JavaScript 파일
은 다음 기능을 제공합니다.

  • 설치된 JRE들의 정확한 탐지
  • 가벼운 JRE 설치
  • 단 한 줄로 완벽한 애플릿 런칭 (JRE 탐지와 필요시 업그레이드)
  • 단 한 줄로 완벽한 Web Start 프로그램 런칭

다음 HTML 은 Java 1.6 이 설치되었는지 확인하고, Java Applet을 실행하는 코드 전체입니다:

<script src="http://java.com/js/deployJava.js"></script>

<script>
    deployJava.runApplet({codebase:"http://www.example.com/applets/",
    archive:"ExampleApplet.jar", code:"Main.class",
    width:"320", Height:"400"}, null, "1.6");
</script>

추가로, 이 버전을 사용하면 웹 브라우저에서 애플릿을 실행해서, 페이지 밖으로 끌어내고, 브라우저를 닫으면 애플릿이 여전히 실행중인 것을 볼 수도 있습니다(다른 프로세스에서 동작하므로 가능). 상당히 멋지죠.

Java와 JavaScript 간의 통신이 쉬워진 것도 재밌는 기회가 될 수 있을 것 같습니다.

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

댓글을 달아 주세요

  1. addr | edit/del | reply mongs 2009.09.01 23:31

    좋은 정보 감사합니다. 담아갈께요

from GQuery: Java, GWT, and jQuery together on Ajaxian

GWT와 jQuery를 함께 사용하고 싶으신 분들을 위해 Ray Cromwell 씨가 GQuery를 만들었습니다. 뭐 대충 이런 식으로 Java에서 쓸 수 있습니다.
public void onModuleLoad() {
    $("div").css("color", "red").click(new Function() {
        public void f(Element e) {
            Window.alert("Hello");
            $(e).as(Effects).fadeOut();
        }
    });
}

제작자 페이지를 간단히 요약하면요...
  • 작고 빠르고 효율적인 코드
  • GWT 1.5 와 함께 연동하는 방법 : 1.5의 기능덕분에 이 프로젝트가 가능해진 것 같습니다.
  • GQuery 플러그인 작성법 (환장하게 간단하다네요)
    /**
     * Convert to Plugin interface provided by Class literal.
     */
    public <T extends GQuery> T as(Class<T> plugin) {
        return (T) plugins.get(plugin).init(this);
    }
  • 컴파일 타임 셀렉터
    public interface MySelectors extends GQuery.Selectors {
      @Selector("div")
      public GQuery allDivs();

      @Selector("div.foo")
      public GQuery allFooDivsBelow(Element context);

    }
  • $$ 함수
    Properties literal = $$("{ foo: 'bar', baz: 'bam'}");

    $("div").attr($$("{ foo: 1, bar: 2 }"); // set every DIV to have a foo attribute = 1, and bar attribute = 2

    // And;
    $$("{foo: 1, bar : 2}").get("foo") == 1;
    $$("{foo: 1, bar: { baz: 3} }").get("bar.baz") == 3;
이렇게 되어있습니다.


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

댓글을 달아 주세요

GChart 2.0

2008. 4. 2. 00:42 from [IT] Web Tech
from GChart 2.0

사용자 삽입 이미지

GChart 2.0 이 릴리스 되었습니다.

2.0에서는 파이, 선, 면적 도표, 기준선 막대 차트 등에 대한 지원이 추가되었습니다. John Gunder씨가 GChart 에 대한 기술적인 사항에 대해서도 썼습니다.

GChart 의 여러가지 데모, GChart javadoc, GChart 인스톨하는 법(GWT필요) 에 대한 정보도 보실 수 있습니다.
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요