Posted title : 태그 : Java
2009/02/28   10회 JCO 컨퍼런스 후기 [4]
2009/01/20   [JavaFX] Migration From Preview Release to JavaFX1.0
2009/01/18   [javaFX] 웹서비스 flickr이미지 검색 어플리케이션
2009/01/14   톰캣 원격 디버깅 debug 모드로 톰캣 띄우기
2009/01/07   [자바] final modifier
2007/12/22   [eclipse] video tutorial
2007/12/22   [eclipse] java project를 web project로 변경하기
Posted
2009년 02월 28일 Posted title : 10회 JCO 컨퍼런스 후기

 

10회 JCO 컨퍼런스 후기

 

개회사: 이클립스가 태양을 점점 가리고 있다. 정통부폐쇄, 명텐도 ... 그럼에도 불구하고 노력하자.

참석하는 사람이 많이 줄은거 같다.

 

1. Session 1 : Kestrel 105 - Method Chain & Ajax Application

강의가 정상적으로 끝났다면 별4개는 줄 수 있었을텐데..

하지만 강의자료 18/36 밖에 소화하지 못 했다는것은 준비부족이라는 말밖에 ...

장황한 서론과 본인의 책소개

메소드체인에 대해 들은것이라곤 prototype이나 jquery에 비해 쓸데없는 객체생성이나 루프가 없다는 것으로 끝. (prototype은 document.getElementById해도 native하지 않은 뭔가 가공한 객체를 넘겨줌, jquery는 생성한 객체를 캐시를 위해 어떤 배열에 담는다. FireBug 를 통해 디버깅모드로 단계별로 진행해주는것을 보니, js프레임웍단에서 단순히 id로 객체가져오는데도 부수적인 로직을 많이 탐을 알 수 있었다.)

별: 2

 

2. Session 2 : Mustang 102 - Seam 에서 WebBeans가 되기까지

레드햇혹은 선의 스폰서 세션

전세계 프로젝트에서 1%밖에 쓰이지 않는 엔터티빈에 대한 반성으로 하이버네이트에서 유명한

Gavin King에게 수술을 시켜서 EJB3.0을 만들고,

요거랑 Persistence Layer랑 JSF를 손쉽게 엮어주는 SEAM 프레임웍을 만듬.

표준으로 만들자 하여 JSR-299 Web Beans로 제안됨.

이 기술이 거의 어노테이션 기반의 디펜던시 인젝션으로 되어 있는데, DI 라면 이 개념을 널리 퍼뜨리고 노력한 스프링쪽에서는 자기네가 아닌 Sun쪽에서 표준이 만들어진다는 점에서 자존심이 상했는지 JSR-299에 반대하며 투표를 거부

별: 4


3. Session 3 : Tiger 103 - 차세대 배치 시스템 구축 성공 전략

국내에서 spring-batch를 이용한 reference가 생겼다는 점에 의의

써보고 싶다.

별: 3


4. Session 4 : Merlin 104 - Practical MapReduce

MapReduce를 통해 구글의 페이지랭킹이 어떻게 이루어지는지 알게 된 좋은 기회였다.

알고리즘에 대해서도 간단하면서도 이해하기 쉽게 설명해주셨고,

말하는 속도도 딱 적당했다.

HeadFirst Hadoop도 같이 들었으면 좋았을껄...

별:5

 

 

시스템: 사전 강좌 예약제에 대해선 정말 너무 너무 만족한다. (처음 시행된 제도라 참석신청만 했다가

나중에 보니 강좌도 신청하는거라 원하는 강좌를 몇 개 신청못했었다.

참석신청한 후 바로 등록하라고 안내가 있었으면 더 좋았었을걸..)

별 5개

 

경품: 처음으로 이렇게 많은 경품을 타봤다.

미코노미, 이클립스 프로젝트 필수 유틸리티,

썬의 듀크 매달려있는 연필꽂이

Fire up your Passion Again 이라고 쓰인 썬의 파란색 티,

UnFakeable Linux라고 쓰인 레드햇의 빨간색 티,

마지막으로 마우스와 볼펜들

 

혹시나 아는 사람 있을까 둘러봤는데 한 사람도 못 만났다.

 

추신

이번 강의는 못들었지만 신상철님은 언제나 열정적이시다. 쉬는시간에도 선 부스 앞에서 JavaFX에 대해 열정적으로 설명하시고 계셨다.

마지막으로 준비하고 진행하느라 고생했던 분들에게 진심으로 감사드립니다.

Posted by 지니랜드 | 2009/02/28 21:36 | 자바 | 트랙백(1) | 덧글(4)
2009년 01월 18일 Posted title : [javaFX] 웹서비스 flickr이미지 검색 어플리케이션

 

학습 곡선 일지 4편: 웹 서비스 액세스 from http://blog.sdnkorea.com/blog/652

 

예제 그대로 실행해보려 했더니 1.0 대의 API에 없어지거나 변경된 메소드들이 많아서

컴파일이 되는 정도로만 수정

레이아웃은 SequentialCluster등을 몰로 바꾸어야 할 지 몰라서 그냥 좌표로 하드코딩 -_-

 

 

 

Main.fx

/*
* Main.fx
*
* Created on 2009. 1. 17, 오후 8:46:14
*/

package imagesearch;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.ext.swing.SwingLabel;
import javafx.ext.swing.SwingTextField;
import javafx.ext.swing.SwingList;
import javafx.ext.swing.SwingListItem;
import javafx.ext.swing.SwingIcon;
import javafx.ext.swing.SwingButton;
import javafx.scene.paint.Color;
import javax.swing.border.LineBorder;
import javafx.scene.Group ;

import java.lang.System;
/**
* @author bumjin
*/
var searchLabel = SwingLabel {
    text: "Search:"
    translateX: 10
    translateY: 0
};
var searchTextField = SwingTextField {
    columns: 30
    translateX: 150
    translateY: 0

};
var searchButton = SwingButton {
    text: "Search"
    font: Font {name: "Arial", size: 11}
    translateX: 500
    translateY: 0
    width: 80
    height: 22
}
var matchedImageLabel = SwingLabel {
    text: "Progress"
    translateX: 10
    translateY: 40
};
var matchedImagePB = TempProgressBar {
    width: 350
    translateX: 150
    translateY: 40
};

class PhotoList extends SwingList {
    public var onChange:function(photo:Photo);
    public var selectedPhoto:SwingListItem = bind selectedItem on replace {
        var photo = selectedPhoto.value as Photo;
        if(onChange!= null) {
            onChange(photo);
        }
    }

}

var thumbnailList = PhotoList {
    //hmax: Layout.UNLIMITED_SIZE
    //vmax: Layout.UNLIMITED_SIZE
    translateX: 10
    translateY: 80
    width: 300
    height: 230
    scrollable: true
};

//var selectedImageLabel = SwingLabel {
//    translateX: 10
//    translateY: 320
//    text: "Selected Image"
//};

//var selectedImagePB = TempProgressBar {
//    translateX: 150
//    translateY: 320
//};

var selectedImageDisplay = SwingLabel {
    //hmax: Layout.UNLIMITED_SIZE
    //vmax: Layout.UNLIMITED_SIZE
    translateX: 320
    translateY: 80
    width: 300
    height: 230
};

// configure the search field
var searcher = ImageSearcher {
    callback: function(photos:Photo[]):Void {
        thumbnailList.items =
        for(photo in photos) {
            SwingListItem {
                text: photo.title
                value: photo
            }
        };

        matchedImagePB.indeterminate = false;
    }
};

var search = function():Void {
    System.out.println("searching... {searchTextField.text}");
    matchedImagePB.indeterminate = true;
    searcher.search(searchTextField.text);
};

searchTextField.action=search;
searchButton.action=search;
// configure the image loader
var imageLoader = function(photo:Photo):Void {
    if(photo != null) {
        matchedImagePB.indeterminate = true;
        photo.loadFullImage(function():Void{
            selectedImageDisplay.icon = SwingIcon {
                image: photo.fullImage };
            matchedImagePB.indeterminate = false;
        });
    }
};

thumbnailList.onChange = imageLoader;

// WORK AROUNDS
selectedImageDisplay.getJComponent().setOpaque(true);
selectedImageDisplay.getJComponent().setBackground(Color.WHITE.getAWTColor());
selectedImageDisplay.getJComponent().setBorder(new LineBorder(Color.BLACK.getAWTColor(), 1, true));

Stage {
    title: "Application title"
    width: 650
    height: 400
    scene: Scene {
        fill: Color.WHITE
        //width: 600
        //height: 400
        content :[
            searchLabel
            , searchTextField
            , searchButton
            , matchedImageLabel
            , matchedImagePB
            , thumbnailList
//            , selectedImageLabel
//            , selectedImagePB
            , selectedImageDisplay]
    }
}

 

Photo.fx

/*
* Photo.fx
*
* Created on 2009. 1. 17, 오후 8:50:38
*/

package imagesearch;

/**
* @author bumjin
*/

import javafx.scene.image.*;
   import java.lang.*;
   import javax.swing.SwingUtilities;
   import javax.imageio.ImageIO;

   public class Photo {
       public var id:String;
       public var server:String;
       public var farm:String;
       public var title:String;
       public var secret:String;

       var image:Image = null;

       public var fullImage:Image = null;

       public def fullImageURL = bind "http://static.flickr.com/{server}/{id}_{secret}.jpg";

       public function loadFullImage(
               callback:function():Void
               ):Void {

           if(image == null) {
               var thread = new Thread(Runnable {
                   public override function run():Void {
                       var strImageUrl = "http://static.flickr.com/{server}/{id}_{secret}.jpg";
                       System.out.println("loading: {strImageUrl}");
                       var buffImg = ImageIO.read(new java.net.URL(strImageUrl));

                       SwingUtilities.invokeLater(Runnable {
                           public override function run():Void {
                               image = Image.fromBufferedImage(buffImg);
                               fullImage = image;
                               if(callback != null) {
                                   callback();
                               }
                           }
                       });

               }});
               thread.start();
           } else {
               callback();
           }

       }
   }

 

TempProgressBar.fx

 

/*
* TempProgressBar.fx
*
* Created on 2009. 1. 17, 오후 9:20:09
*/

package imagesearch;

/**
* @author bumjin
*/

import javafx.ext.swing.*;

    public class TempProgressBar extends SwingComponent {

    protected override function createJComponent():javax.swing.JComponent {
        return new javax.swing.JProgressBar();
    }
    public var indeterminate:Boolean = false on replace {
        var prog =
        this.getJComponent() as javax.swing.JProgressBar;
        prog.setIndeterminate(indeterminate);
}}

ImageSearcher.fx

/*
* ImageSearcher.fx
*
* Created on 2009. 1. 17, 오후 8:48:41
*/

package imagesearch;

/**
* @author bumjin
*/

import javax.xml.parsers.*;
import org.xml.sax.helpers.DefaultHandler;
import java.lang.System;
import java.lang.Thread;
import java.lang.Runnable;
import javax.swing.SwingUtilities;

   public class ImageSearcher {
       public var callback: function(photos:Photo[]):Void;

       public function search(search:String) {
           var thread = new Thread(Runnable {
               public override function run():Void {
                   var photos:Photo[];

                   var handler = DefaultHandler {
                       public override function startDocument() { }
                       public override function startElement(
                           uri:String,
                           localName:String,
                           qName:String ,
                           attributes:org.xml.sax.Attributes ) {
                           if(qName == "photo") {
                               var photo = Photo {
                                   id: attributes.getValue("id")
                                   server: attributes.getValue("server")
                                   farm: attributes.getValue("farm")
                                   title: attributes.getValue("title")
                                   secret: attributes.getValue("secret")
                               };
                               insert photo into photos;
                           }
                       }
                       public override function endElement(uri:String , localName:String , qName:String ) {  }
                       public override function endDocument() { }

                   };

                   var SEARCH_URL = "http://api.flickr.com/services/rest/?"
                   "method=flickr.photos.search";
                   var key = "a876089a0c597414e3f6136b68e957e1";
                   var MAX_IMAGES = 100;
                   var searchUrl = "{SEARCH_URL}&api_key={key}&per_page={MAX_IMAGES}&text={search}";
                   var url = new java.net.URL(searchUrl);
                   var is = url.openStream();
                   var factory = SAXParserFactory.newInstance();
                   var saxParser = factory.newSAXParser();
                   saxParser.parse(is, handler);

                   SwingUtilities.invokeLater(Runnable {
                           public override function run():Void {

                               if(callback != null) {
                                   callback(photos);
                               }
                           }
                   });
               }
           });
           thread.start();
       }
   }

Posted by 지니짱 | 2009/01/18 15:56 | 자바 | 트랙백
2009년 01월 14일 Posted title : 톰캣 원격 디버깅 debug 모드로 톰캣 띄우기

1. catalina.sh 에서 JDPA_ADDRESS설정

$vi catalina.sh

echo "Using CATALINA_BASE:   $CATALINA_BASE"
echo "Using CATALINA_HOME:   $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
echo "Using JAVA_HOME:       $JAVA_HOME"

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="1818"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-Xdebug -Xrunjdwp:transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=n"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

 

 

설명 : JPDA_ADDRESS 가 정의되지 않았으면 디버깅용포트를 1818로 설정

if [ -z "$JPDA_ADDRESS" ]; then     (-z 문자열 : 문자열의 길이가 0이면 참)

    JPDA_ADDRESS="1818"

2. 디버그 모드로 톰캣 실행

$ catalina.sh jpda start

3. eclipse에서 디버깅 설정

Run -> Debug Configurations

Remote Java Application 항목에 추가

 

4. 이제 원하는 WAS단 서블릿 같은 코드에 브레이크 포인트를 걸고 디버깅하면 된다.

Posted by 지니짱 | 2009/01/14 10:29 | 자바 | 트랙백
2009년 01월 07일 Posted title : [자바] final modifier

자바 헛 배웠군 -_-

클래스에 final 사용해놓고 변경안되는 줄 알고 있었는데.. 쩌비

 

변수에 쓸때만 값이 변경안되고 , 클래스에 쓸때는 확장을 막는 기능을 하네.

 

4.3 final - 마지막의, 변경될 수 없는

final은 '마지막의' 또는 '변경될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 사용될 수 있다.
변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메서드에 사용되면 오버라이딩을 할 수 없게 되고 클래스에 사용되면 자신을 확장하는 자손클래스를 정의하지 못하게 된다.

final이 사용될 수 있는 곳 - 클래스, 메서드, 멤버변수, 지역변수


[참고]대표적인 final클래스로는 String과 Math가 있다.

Posted by 지니짱 | 2009/01/07 09:45 | 자바 | 트랙백
2007년 12월 22일 Posted title : [eclipse] video tutorial
http://jonah.cs.elon.edu/dpowell2/Courses/EclipseTutorial/EclipseTutorial.htm
Posted by 지니짱 | 2007/12/22 15:15 | - 이클립스 | 트랙백
2007년 12월 22일 Posted title : [eclipse] java project를 web project로 변경하기
출처: http://dev.eclipse.org/newslists/news.eclipse.webtools/msg14297.html

What I'm doing for that is as below:
1. Open .project file for the project to be converted to web project.
2. Insert the following to natures element.
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
3. Open the properties for the project and go to the page for Project Facets
4. Add Java and Dynamic Web Module facets to the project.
5. Done.
Posted by 지니짱 | 2007/12/22 14:54 | - 이클립스 | 트랙백
◀ 이전 페이지 다음 페이지 ▶



지니랜드
by 지니랜드
카테고리
전체
프로그래밍
자바
- 이클립스
- 기타언어 (ruby, php)
웹기술 HTML javascript
컴퓨터
- Unix/Linux
- spring
- 테스팅
툴 프로그램 설치
- 버전관리
영어
동영상
영화 책
일상
여행
아무거나
재테크
펀드
미분류
이글루링크
소스코드위를 걷다.....
life logging
거북거북 월드 (ㅡ.-..
아직 열지 않은 선물
All about IT Trends
까먹지말자!
이규영 연예영화 블로그
ok_code 블러그
최근 등록된 덧글
하핫 그렇군요. 방문 AS..
by 지니랜드 at 12/23
네^^ 제가 직접 찾아올 ..
by 염지홍 at 12/14
카테고리별로 해당되는 ..
by 지니랜드 at 05/22
이 책들을 다 보면... ..
by 랑우 at 04/14
오지천사님 좋은 정보 ..
by 지니랜드 at 03/16
잠깐지나가다가 들렀습니..
by 오지천사 at 03/09
이런 우연이 ㅎㅎㅎ, 저도..
by 지니랜드 at 03/01
저랑 2개나 같이 들으셨군..
by 상욱 at 03/01
아 그러셨구나.. 오늘 못..
by 지니랜드 at 02/28
ㅎㅎㅎ JCO 오시나 보군요..
by 윤걸 at 02/26
FISH RSS
최근 등록된 트랙백
2009 자바 개발자 컨퍼런..
by cutewebi 희정냥★
도서이벤트 4탄 (통계의..
by Korean Healthlog
『프리젠테이션 젠』출간..
by acornLoft
뉴욕의 프로그래머
by The note of Legendre
[책] 뉴욕의 프로그래머
by lovesera.com: ART o..
[행사] 매쉬업 컨퍼런..
by lovesera.com: ART o..
[행사] 매쉬업 엑스..
by lovesera.com: ART o..
루비(Ruby) 설치 및..
by Happy egoist
개발시에 참고하자.. /..
by mcsong's languid aft..
이글루 파인더
라이프로그
프리젠테이션 젠
프리젠테이션 젠

초난감 기업의 조건
초난감 기업의 조건

Stick 스틱!
Stick 스틱!

당신의 기업을 시작하라
당신의 기업을 시작하라

테스트 주도 개발
테스트 주도 개발

조엘 온 소프트웨어
조엘 온 소프트웨어

Head First Design Patterns (Paperback)
Head First Design Patterns (Paperback)

실용예제로 배우는 웹 표준
실용예제로 배우는 웹 표준

아랑은 왜
아랑은 왜

천년전의 글로벌 CEO, 해상왕 장보고
천년전의 글로벌 CEO, 해상왕 장보고

마케팅 천재가 된 맥스
마케팅 천재가 된 맥스

태그
크롬확장기능 제주도 커맨드패턴 파일다운로드 chromeos dodreams 트위터 모바일뱅킹 땡땡이 hangulime google 디자인패턴 퀴즈 IETab 이벤트 에도가와란포 commandpattern 웨이브알리미 옷걸이 하나은행 추리소설 감귤 아이폰 하나nbank 아이팟 트위터이벤트 space underscore 독서대 크롬OS
rss

skin by 에셈