'2007/03'에 해당되는 글 5건

  1. 2007/03/29 .DS_Store 지우기 by 타오
  2. 2007/03/28 OpenAjax Alliance by 타오
  3. 2007/03/22 Java RESTful WS API (JSR-311) 의 첫 구현체가 나왔습니다. (2) by 타오
  4. 2007/03/13 Reflection Tip in ActionScript3, Flex2 (2) by 타오
  5. 2007/03/01 우타다 히카루, Flavor Of Life (2) by 타오

.DS_Store 지우기

잡다 : 2007/03/29 16:00
맥에서 만들어진 폴더에는 .DS_Store파일이 생기는데 자꾸 CVS에 올라간다던가 압축에 포함된다건가해서 사람 귀찮게 하네요. 그래서 다 지웠습니다. ㅎㅎ

$ sudo find / -type f -name '\.DS_Store' -print -delete


그리고 네트웍 볼륨에는 생기지 않도록 하는법은 아래와 같이 설정하면 됩니다.

$ defaults write com.apple.desktopservices DSDontWriteNetworkStores true



출처 : What is .DS_Store?
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 타오

트랙백 주소 :: http://taoism.tistory.com/trackback/34

댓글을 달아 주세요

OpenAjax Alliance

개발 : 2007/03/28 15:24
OpenAjax Alliance라는 단체가 있었군요.

팔글 - 인사이드 구글 블로그를 통해 구글의 가입 소식을 듣게 되어서 해당 사이트에 가보니 이건 뭐 가입 안한 회사가 없네요 -0-;;

그중에서도  Thinkfree 와 웹오피스 시장에서  경쟁하고 있는  Zoho 가 눈에 띄는군요 ㅎㅎ

Thinkfree도 고스고스?
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 타오

트랙백 주소 :: http://taoism.tistory.com/trackback/32

댓글을 달아 주세요

구현하기는 귀찮고 이미 예제로 보여진 코드를 봐버려서 계속 기다리던 JSR-311의 첫 구현체가 어제 나왔습니다. Sun Web Developer Pack (SWDP)에 포함되어 릴리즈 되었는데요 jMaki라던가 Dynamic Faces등을 같이 포함하고 있네요.

* 다운로드는 위 SWDP 링크에 가시면 받을수 있습니다.

바로 아래 코드가 JSR-311의 예제로 Marc Hadley의 블로그에 포스팅됐던 저를 기다리게 만든  그 넘입니다.

@UriTemplate("widgets/{widgetid}")
@ConsumeMime("application/widgets+xml")
@ProduceMime("application/widgets+xml")
public class Widget {

    @HttpMethod(GET)
    public Representation getWidget(@UriParam("widgetid")
    String id) {
        String replyStr = getWidgetAsXml(id);
        return new StringRepresentation(replyStr, "application/widgets+xml");
    }

    @HttpMethod(PUT)
    public void updateWidget(@UriParam("widgetid")
    String id, Representation<Source> update) {
        updateWidgetFromXml(id, update);
    }

    @LastModified
    public Date getChangeDate(@UriParam("widgetid")
    String id) {
        return getLastChanged(id);
    }
}



보시다시피 annotation으로 해당 bean(POJO) 을 특정 url pattern(URITemplate)에 매핑하고 bean의 method들을 GET이나 PUT 등의 HttpMethod에 매핑하는 방식입니다.

어제 오늘 기존 구현에 적용해 보았는데 예상대로 아주 훌륭합니다! 빠르게 구현할수 있을뿐 아니라 코드가 직관적이라 참 좋네요 ㅎㅎ

머 사실 아직 버그가 눈에 많이 띠긴하지만 아직은 early access형태이고 RESTful WS에 걸맞게 아주 쉽게 구현할수 있다는점은 정말 높은 점수를 주고 싶습니다~
(URL패턴에서 추출된 문자열상에서 "///" 은 "/"로 변환되어버리더군요... 물론 인코딩된상태로 전달되었습니다)

한 가지 문제는 사용하는 방법이 문서가 빈약하기도 하고 NetBeans하고 자꾸 엮는다거나 code-generator까지 붙어 있고 머 좀 복잡하게 만들어놨더군요. 아마도 Marc Hadley 아저씨가 심하게 밀고 있는 WADL이나 JAX-WS등하고 통합때문인거 같기도 한데 시간 부족으로 자세히는 보지 못하고 generate된 테스트 코드를 살펴보고 바로 붙여보았더니 다행히 잘 되더군요^^


톰캣에 간단히 붙여봤는데요 먼저 위의 코드와 같은 방식으로 bean을 만드시고 그 클래스들을 RESTBeanResourceInterface를 상속한 넘에서 class reference를 외부로 제공해줍니다.

package com.wangtao.rest;

import java.util.HashSet;
import java.util.Set;

import com.sun.ws.rest.impl.RESTBeansResourcesInterface;

public class RestBeanResources extends RESTBeansResourcesInterface {
    private Set<Class> classes;
    @Override
    public Set<Class> getResourceClasses() {
        if(classes == null){
            classes = new HashSet<Class>();
            classes.add(RestBean1.class);
            classes.add(RestBean2.class);
            classes.add(RestBean3.class);
        }
       
        return classes;
    }
}



위의 클래스와 HttpRequest들을 해당 bean으로 매핑해줄 ServletAdapter를 web.xml에 적어주면 끝입니다

   
    <servlet>
        <servlet-name>RESTBeans Application</servlet-name>
        <servlet-class>
            com.sun.ws.rest.impl.container.servlet.ServletAdaptor
        </servlet-class>
        <init-param>
            <param-name>resourcebean</param-name>
            <param-value>
                com.wangtao.rest.RestBeanResources
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


    <servlet-mapping>
        <servlet-name>RESTBeans Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>



테스트 해보시면 바로 각 URI형태에 매핑된 객체들의 함수들이 수행될겁니다~



update1.
구현법에 중요한 lib추가를 빼먹었네요^^  swdp.jar:/rest-impl/lib 밑의 4개 jar파일과 swdp.jar:/shared/lib/mail.jar를 WEB-INF/lib에 추가하니 잘 되는군요~

update2.
bean 작성 하는 코드 부분(첫번째 코드블럭)에
@UriTemplate("widgets/{widgetid}")
라고 쓰인부분이 구현체에서는 URI앞이 /로 시작해야합니다.
@UriTemplate("/widgets/{widgetid}")
처럼 말이죠~

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 타오

트랙백 주소 :: http://taoism.tistory.com/trackback/31

댓글을 달아 주세요

  1. 아 ;; 어렵다 ;; 무슨말인지;;;

    • 걍 서블릿을 상속안하고 일반 클래스를 만들어서 URL하고 연결짓는거였는데 저도 잘 모르다보니 심하게 장황했네요 ㅋㅋ

JavaScript에서는 eval 함수를 통해서 쉽게 reflection을 할수 있는데 ActionScript는 eval함수를 원래 제공하지 않기때문에 Reflection API가 따로 존재합니다~
(JSLint라는 JavaScript Verifier를 통해 eval이 포함된 스크립트를 돌려보면 "eval is evil"이라는 재밌는 문구가 나오는군요 ㅎㅎ)

AS3는 flash.utils 패키지를 통해 reflection 기능을 제공해주는데 그 중에서 클래스의 이름을 통해 Class 객체를 얻을수 있는 getDefinitionByName() 이라는 함수가 있습니다.

재밌게도 이놈이 아래와 같이 flash로 시작하는 class 는 잘 찾아오는데

    var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class;
    var instance:Object = new ClassReference();


이 코드를 조금 바꿔서 아래처럼 flash.xxx 형태의 패키지가 아닌경우는 ReferenceError를 발생시킵니다

    var ClassReference:Class = getDefinitionByName("mx.effects.Effect") as Class;


원인은 간단합니다. flash로 시작하는 넘들은 Flash Player가 들고 있는 표준 API이고 그 외의 mx로 시작하는 클래스나 그외 custom class들은 모두 compile time에 output에 linking 되는데 문자열로 접근을 하는 경우는 linking에서 제외됐기 때문입니다.

강제로 linking에 포함시키는 법을 찾아봐야겠지만 간단히 아래와 같이 코드에 해당 타입에 대한 선언을 추가해서 linking에 포함시킬수도 있습니다 -0-;;;

    var dummy1:mx.effects.Effect;
    var dummy2:mx.contorls.Alert;


이렇게 되면 진정한 reflection이라고 보기는 힘들겠지만 어쨌든 됩니다! 그게 중요하죠 -0-






이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 타오

트랙백 주소 :: http://taoism.tistory.com/trackback/30

댓글을 달아 주세요

  1. 자바랑 맞짱을 뜨려는군요. 이미 짱먹고 있지만..

    • 현재는 가장 뛰어난 브라우저 RIA환경인건 사실인것 같습니다. 언어적으로도 기존 자바와 같은 컴파일 언어와 스크립트언어의 양다리를 걸치고 있어 적응이 쉬운편이구요.

꽃보다남자 일본판 시즌2, 리턴즈에 삽입된 Flavor Of Life가 싱글로 발매가 됐나보군요.

예전엔 나름대로 하드한 넘들을 많이 들었었는데 요샌 듣기 편한 노래들이 더 좋더군요^^
부담없이 함 들어보세요~







사용자 삽입 이미지

* 짤방은 꽃보다 남자 시리즈 여주인공입니다. 대만판보다는 훨 이쁘군요 ㅋㅋ

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 타오

트랙백 주소 :: http://taoism.tistory.com/trackback/29

댓글을 달아 주세요

  1. 저 플레이어는 혹시 직접 개발하셨다는?