달력

7

« 2025/7 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2009. 7. 11. 17:11

Silverlight 3 Released 공부하는 것2009. 7. 11. 17:11

ScottGu's Blog에 "실버라이트 버전 3의 Release"에 대한 글이 올라왔다. 미국시간으로 7월 10일자로 Release된 것이다. Silverlight 2가 작년에 Release되고, 채 1년도 되지 않았는데 벌써 버전 3를 정식으로 Release된 것은 굉징히 빠르게 기능을 개선하고 개발하고 있다는 반증과 같다.

Scott Gusly는 그의 블로그를 통해서 새로 정식으로 Release된 Silverlight 3의 Feature를 아래과 같이 소개하고 있다.

Siverlight 3는 하드웨어 그래픽 가속을 이용하여 HD 비디오를 볼수 있도록 도와준다. 이는 낮은 사양을 PC를 가진 사용자가 GPU를 이용하여 웹을 이용하여 동영상을 1080p HD비디오를 즐길수 있다.
하지만, 낮은 사양의 PC의 사양의 PC에서 1080p를 즐길수 있을 만한 비디오는 제한되어 있다. AGP에서 1080p를 지원하는 GPU를 탑재한 그래픽 카드는 생각보다 구하기 힘들다. 요즘은 PCI-Express기반의 인터페이스를 지원하는 그래픽카드가 많이 나와있고, 대중화 되어서 오히려, AGP에서 1080p를 구동가능한 그래픽카드는 구하기 쉽지 않다. 
특히 요즘 많이 사용하고 있는 인텔의 Atom침 기반의 넷북들은 싼가격을 이유로 낮은 사양의 GPU침을 탑재하고 있어서, 이러한 기능을 어떤 사용자에게는 그림의 떡이다.

그래도, 다행 스러운 것은 Nvidia에서 개발하고 있는 ion 플랫폼 기반의 넷북을 사용한 넷북들이 출시된다면, 이러한 약점들은 많은 부분 커버될 것이라 생각된다. 또한 인텔도 자사에서 개발한 넷북보드의 최대 약점으로 알려져 있는 그래픽칩셋에 대한 보안책들을 계속 내놓고 있다.

Silverlight 3눈 새로운 코덱들을 지원한다. H.264 video, AAC 그리고 MPEG-4 컨텐츠를 지원한다.
그리고 IIS Media Services를 이용해서 HTTP상에서 Streaming Sevice를 제공할 수 있다.
이에 대한 데모는 여기에 있으니 참조하길 바란다.

Silverlight 3 는 브라우져 밖에서도 Application으로 독립적으로 동작할 수 있다.
이는 새롭게 만든 애플리케이션이 단지 웹 브라우져에서만 동작하는 것이 아니라, 윈도우즈나 맥환경에서 애플리케이션으로 설치되고 동작할 수 있다는 것을 의미한다.
이를 위해서 개발자는 네트워크 상태를 모니터해서, 네트워크 모드로 또는 Off-line모드로 동작할지 선택이 가능하게 만들어 줄 수 있다. 그리고 Silverlight 3는 자동으로 애플리케이션을 업그레이드 할 수 있기 때문에 웹상에 새로운 버전이 있다면, 이를 다운받아 인스톨이 가능하다.

Silverlight 3를 위한 개발툴 도한 새로 Release 되어서 다운로드가 가능하며 VS2008에서 사용가능하다. 
툴은 아래 링크에서 다운로그 가능하다.
       - VS 2008 Tools for Silverlight: 다운로드
       - Silverlight Toolkit(추가 컨트롤): 다운로드


 
 
:
Posted by 행복상자
오늘은 최근 며칠전에 보아 두었던, Twitter4J 의 API와 이를 Java에서 사용가능하도록 구현한 Twitter4J 를 분석하기로 마음 먹었다. 일단 웹에서 Twitte4J 2.0.8버전을 다운로드 받아서, Eclipse에서 환경을 만들어보았다. 다운로드 받은 파일을 압축을 풀면, Source Code와 Sample Code 그리고 Junit 코드가 있다.
Junit 코드는 Twitter4J 라이브러리의 사용법을 손쉽게 익힐수 있는 좋은 예제이다.

몇가지 테스트를 하다보니, 클라스의 메소드들의 내용을 출력해서 볼 필요가 있어서, 이를 Console에 찍어보았는데, 메소드 또는 getter를 통해서 Twitter 서버의 결과들을 가져와 그 내용을 살펴 볼수 있었다.

아래과 같이 Java Doc에 있는 문서를 뒤져서, System.out.println() 메소드를 이용하여 처음에 만들어 보았다.  
public void testSearch() throws TwitterException
 {
        Twitter tw = new Twitter();
        String queryStr = "happyzoo";
        Query query = new Query(queryStr);
        QueryResult queryResult = tw.search(query);
     
        List<Tweet> tweets = queryResult.getTweets();
        System.out.println("tweets.size: ==> " + tweets.size());
               
        for (Tweet tweet : tweets) {
         System.out.println("tweet.getText: ==> " + tweet.getText());
       System.out.println("tweet.getSource: ==> " + tweet.getSource());
                    ....    
        }
 }



위의 코드는 Junit을 이용하여 테스트용으로 만든 코드이지만, 코드의 내용을 검증하지는 않았다. 개인적으로는 TDD를 선호하지만, 갑작스럽게 확인하거나 할때는 그냥 junit에다 테스트 코드를 작성하고, 나중에 Refactoring을 한다. 새로운 Library를 익혀야 하거나 테스트 코드를 짜볼 때는 Junit로 테스트를 작성하고, 나주에 필요할 때, 다시 이를 보고, 사용법을 익히는 시간을 줄이곤 한다.

그리고, 사실 다음 단계들이 Refacoring을 하는 단계라고 생각할 수도 있다.
위의 코드가 그리 보기 않좋았다. 그래서 이를 다시 수정하였다. 나중에 코드를 작성할때 필요한 내용들을 확인할 때 재 사용이 가능할 거라고 생각하였다. (이 역시 나의 습관인데, 별도의 클래스의 작성 필요 없는 경우는 static으로 메소드를 선언하여 사용하곤 한다.)


private static void showTweet(Tweet tweet){
    StringBuffer showData = new StringBuffer();
    
    showData.append("tweet.getCreatedAt():" + tweet.getCreatedAt() + "\n");
    showData.append("tweet.getFromUser():" + tweet.getFromUser() + "\n");
    showData.append("tweet.getFromUserId():" + tweet.getFromUserId() + "\n");
    showData.append("tweet.getId():" + tweet.getId() + "\n");
    showData.append("tweet.getIsoLanguageCode():" + tweet.getIsoLanguageCode() + "\n");
    showData.append("tweet.getProfileImageUrl():" + tweet.getProfileImageUrl() + "\n");
    showData.append("tweet.getSource():" + tweet.getSource() + "\n");
    showData.append("tweet.getText():" + tweet.getText() + "\n");
    showData.append("tweet.getToUser():" + tweet.getToUser() + "\n");
    showData.append("tweet.getToUserId():" + tweet.getToUserId() + "\n");

  
    System.out.println("showData: " + showData);
 }

위 처럼 코드를 만들고 나서는, 다른 클래스에 대한 값들을 또한 확인해야 할 필요가 느껴졌다.
그런데, 위와 같은 "showData.append("... ")" 라고 일일이 쳐 주어야 하는 것이 비 생산적이라는 생각이 들어서, 자동으로 위와 같은 형태로 생성해 주면, 이를 출련한 후에 실제 코드에서 생성해서 붙여 쓰는 것이 더 생산적일 거라는 생각이 들어서, 코드를 만들어 주는 코드를 아래 처럼 짜써 넣었다.

public void createTempletCode()
 {
String[] methods = new String[]{
"getCreatedAt",
"getFromUser",
"getFromUserId",
"getId",
"getIsoLanguageCode",
"getProfileImageUrl",
"getSource",
"getText",
"getToUser",
"getToUserId"
  };
  
String str = "";
for (String method : methods) {
str += "showData.append(\"tweet." + buffer + "():\" + " + "tweet." + method + "() + \"\\n\");\n";
}
  
System.out.println(str);
 }

위의 코드는 실제 코드를 만들때의 노가다를 상단부분 없애 주었다. 물로 1~2를 위해서 쓴다면, 여기까지 만든 노력이 별로 효과가 없지만, 말이다. 하지만, 역시 단점이 있다, 메소드들을 java Doc을 뒤져서 복사해서 배열로 만들어 줘야 한다. 이 역시 적지 않은 노가다가 든다. Copy & Paste를 한다해도 메소드가 많다면, 이 역시 쉬운 작업을 아니다.

역시 한번더 개선을 해야 겠다. 일단 위의 코드를 아래처럼 별도이 메소드로 만들어 주었다.

 public static String createTempletCode(String[] methods, String instanceName)
 {
String temp = "";
for (String method : methods) {
   temp += "showData.append(\"" + instanceName + "." + method + "():\" + " + "tweet." + method + "() + \"\\n\");\n";
  }
   
  return temp ;
 }

그리고, reflection을 이용하기로 했다. 이는 junit과 AspetJ 또는 AOP에서 많이 사용되고 있고, 실제로 윈도우나 Java에서 최근들어 많이 사용되고 있는 방법이다. 그러나 사실 일반적인 개발시는 많이 이용하지 않고 있다. 그러나 나는 오는 나의 노가다를 쫑 내기 위해서, 이를 이용할 수 밖에 없었다.

"java.lang.reflect.Method"를 이용해서 내가 java Doc에서 가져오던 내용들을 한번에 가져오기로 하고 다음과 같이 수정하였다. 만약 제대로 가져오면, 위에 있는 메서드를 이용하여 쉽게 원하는 것을 출력할 수 있을 것이다.
 
public void createTempletCode()
 {
System.out.println(createTempletCode(getMethodOfClass(Tweet.class), "tweet")); 
 }

public static String createTempletCode(String[] methods, String instanceName)
 {
String temp = "";
for (String method : methods) {
 temp += "showData.append(\"" + instanceName + "." + method + "():\" + " + "tweet." + method + "() + \"\\n\");\n";
  }
   
  return temp ;
 }

public static String[] getMethodOfClass(Class clazz)
 {
  Class thisClass = clazz;
  Method[] methods = thisClass.getDeclaredMethods();
  
  String[] methodNames = new String[methods.length];
  
  for(int i =0; i < methods.length; i++ )
  {
methodNames[i] = methods[i].getName();
   
  }
  
  return methodNames;

}


코드가 많이 단순해 졌다. 처음 생각했던 내용들이 시간의 흐름사이에서, 생각도 변화하고 아이디어도 변화해서, 위와 같은 모습이 되었다.
조금 전까지도, 어차피 reflection을 적용했으니까, 생성한 코드를 바로 실행하는 로직을 만들어 넣을까도 생각했지만, 이거는 오버스펙이 될거라는 생각에 오늘은 더 이상 추가하지 않을 계획이다. 아직도 몇가지 코드들은 refectoring을 기다리고 있으니 말이다.

Twitter4J의 클래스와 메소드들은 생각보다 사용하기 쉽고, 단순하다.그리고, 이는 일본사람이 만들어서 인지 Unicode에 대한 문제도 없어 보인다.

오늘은 별다른 래퍼 클래스를 만들지 않고, 몇가지 테스트만 더하고, 내가 원하는 것을 한번 만들어 볼 생각이다.


'공부하는 것' 카테고리의 다른 글

GRails 공부 자료들...  (0) 2009.10.04
Silverlight 3 Released  (0) 2009.07.11
Free ASP.NET MVC “NerdDinner” Tutorial Now in HTML  (0) 2009.05.01
Free ASP.NET MVC eBook Tutorial  (0) 2009.03.12
Microsoft Azure Platform  (0) 2008.12.29
:
Posted by 행복상자
애플에 어제 올라온 비교 자료인데, 한국에서 출시되면 어떤것을 살것인가에 대한 고민은 너무나 쉽게 일축시키는 표이다. 물론 구매에 필요한 돈이 된다면야, 고민할 것은 아니지만 말이다.

한국에서의 iPhone의 출시는 이제 거의 기정사실화 되는 분위기이다. 아니 오히려 마케팅 적인 측면에서는 많은 도움이 될거라 생각한다.

내가 가지고 있는 iPod Touch는 iPhone에 비해서 기능이 부족하거나, 제거되어진 채로 출시되고 있다. 물론 나름 만족하고 있지만, 아쉬운점은 항상 있기 마련이다.


과연 어떠한 것을 고를 것인가?

자세한 자료는 http://support.apple.com/kb/HT3630 를 참조하면 된다.

'공부하는 것 > iPhone Application' 카테고리의 다른 글

iPhone Application Life Cycle  (0) 2009.06.01
iPhone SDK Study  (0) 2009.05.31
:
Posted by 행복상자
Application은 모두 시작과 끝을 가지고 있다, Object-C를 이용하여 만들어지는 iPhone용 Application 역시 main()함수를 실행하여, 이를 관리하게 된다.

iPhone Application의 main()함수는 최소한의 작업의 실행을 위해서 사용되어 지는데, 거기에는 3가지의 작업이 순서적으로 실행된다. (아래 그림 참조)


소스 코들 보면서, 설명을 하면,
#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

위의 소소 코드를 보면, main()함수에서는 먼저, "Auto Release pool"을 만들고, 그리고 "UIApplicationMain"을 호출한다. 마지막으로 "Auto Release pool"에서 할당해서 관리하던 메모리들을 해제하는 작업이 진행되고, 프로그램이 종료된다.



'공부하는 것 > iPhone Application' 카테고리의 다른 글

어떤 iPhone을 살것인가?  (2) 2009.06.24
iPhone SDK Study  (0) 2009.05.31
:
Posted by 행복상자