2009년 07월 25일 Posted title : 에도가와 란포

탁연상 (@dodreams )님의 한국최초의 트위터 도서홍보 이벤트로 당첨이 되어 에도가와 란포의 단편집2권을 받아보게 되었다.

 

 

처음엔 에드가 앨런 포 의 소설들을 다시 출간하는 줄 알았는데, 알라딘에서 검색해 보니 어 모르는 책들만 나오는것이 아닌가

그래서 위키로 다시 검색을 해보니 (에도가와 란포) 히라이 타로란 일본작가가 에드가 앨런 포를 따서 이름을 개명한 것이란다.

 

암튼 RT를 보내서 당첨이 되었고, 며칠 후 책을 받게 되었다.

(참고 : RT란 일종의 포워딩개념으로 , 본인이 올리면 본인을 following(글을 볼 수있는)하는 사람들에게만 글이 노출되지만

여러사람이 RT를 해주면 그 여러사람들을 following하는 사람들에게도 노출되므로 홍보나 전파속도가 훨씩 커지게 된다

from http://kkd4139.tistory.com/770

)

 

 

 

인사말과 책에 대한 관련 정보를 얻을 수 있는 링크정보등을 담은 편지는 책을 아직 열지 않았어도 기분을 좋게 만들어주었다.

책은 추리소설답게 진득한 피의 느낌을 주는 제목과 검은색 바탕에 검은색 그림자 ㅎㅎ

영어사전정도로 두툼하게 570여 페이지가 담겨있으나  무겁지 않고, 라인수는 장당 25자 정도에 글자크기도 큰 편

(빨간색 아가사 크리스티의 추리소설의 글씨와 비교해볼때)이라 읽기에 부담이 없었다.

 

음 이제 책을 읽어보자

...

호반정 사건 을 읽고,  이제 첫 작품을 읽었으니 판단 보류

그런데 추리소설은 단편으로만 읽기는 너무 아쉽다. 리뷰는 스포일러가 될까해서 생략~

 

암튼 두드림의 탁연상님에게 감사드리며 , 좋은 홍보효과를 얻으시길 기원하며 , 앞으로 여러 출판사에서 이런 이벤트가 행해졌으면 합니다.

Posted by 지니랜드 | 2009/07/25 15:28 | 트랙백 | 덧글(1)
2009년 03월 24일 Posted title : IE7에서 다운로드시 파일명의 space가 _(underscore)로 바뀌는 현상
파일 다운로드시 IE7에서 space가 _(underscore)로 바뀌는 현상

Window XP 의 IE 7 에서만 발생하는 버그로써 (http://support.microsoft.com/kb/952730 참조) XP 서비스 팩 3 을 설치하면 됩니다.

혹은

String userAgent = request.getHeader("User-Agent");
    if (userAgent.contains("MSIE 7.0")) {
        filename = filename.replace(" ", "%20");   
    }        
    response.addHeader("Content-disposition", "attachment;filename=\"" + filename+"\"");
Posted by 지니랜드 | 2009/03/24 15:41 | 자바 | 트랙백
2009년 03월 18일 Posted title : 한빛 미디어 도서를 이용한 Java Roadmap

 

현재 하는 일: 프로그래머

로드맵에서 각 단계별로 보면 좋은 책: 책도 좋지만 블로그나, 메일링리스트등을 통해 다양하고 최신의 정보를 얻고 피드백을 주고받는게 중요하다고 생각됩니다.

로드맵에 대한 자신의 생각: 적다보니 안 봤던 책이나 다시 봐야할 책들이 많은 거 같습니다. 공부해야겠네요 ㅎ

회사생활 초창기에 이런 책들이 나왔으면 도움이 많이 되었을 거 같습니다.

 

회사에 들어가서 자바 웹 프로그래머가 되야 한다면.. 이라는 생각을 가지고 로드맵을 작성해보았습니다.

 

프로그래밍 입문:  먼저 다음서적들을 읽어보고, 어 내가 생각했던거랑 다르네 하면 진로를 다시 고민해보고,

어 좀 재밌겠는데 하는 생각이 든다면 프로그래머가 되기를 바랍니다.

프로그래머 간접체험과 가이드가 되어줄 책
 

 

 

 

취직전: 회사는 학원이 아니다 기본적인 것들은 배우고 들어가자.

웹 프로그래머가 된다면 HTML만들기와 DB작업을 위한 SQL은 필수다.


HTML은 메모장으로 정적인 HTML을 만들정도, SQL은 select insert delete,update정도면 충분

 
 











 

 

예전엔 필요없었는데, 요새 소프트웨어 경력관리 등록하려면 하루라도 빨리 정보처리기사 따 두어야 한다. (국내에선 자격증이 무시되지만 일본은 자격증 많이 인정해준다.)

리눅스/유닉스는 학교에서 어느정도 접해보는게 좋다. 목적은 윈도우만 주로 쓰던 사람들이 리눅스/유닉스를 회사에서 접했을때의 문화적 충격을 견딜 수 있도록 두려움을 없애는 용도. 로그인해서 간단한 명령어를 직접 실행해보는 정도면 충분

알고리즘도 회사들어가면 시간내어 보기 힘들테니까 여기에 포함


한번에 붙자 !!

 

 




 

음 이제부터가 실질적인 자바 로드맵이 되겠네요. 

이클립스 툴 자체에 대한 사용법(이건 인사이트책)을 먼저 익히고, 자바 언어를 학습해야겠죠. 초보개발자는 IDE부터 시작하는게 좋다고 생각합니다.

        

Java 세상을 덮친 Eclipse 3/e



회사에서 개발을 한다면 소스코드에 대한 버전관리와 버그를 처리하는 시스템은 거의 필수일테고, 그런 시스템이 없다면 아래의 책과 같은 것을 읽으면 누구나 쉽게 시스템을 설치하실 수 있습니다.

 

 















웹 개발을 한다면 서블릿/JSP, JDBC에 대해 공부를 해야 하구요.

 


 

 














이정도 하면 기존 작성된 소스를 유지보수하는데는 지장이 없지만, 경력이 쌓여 이제 설계를 해야한다면 디자인패턴을 적용하고 객체지향 설계를 하거나 혹은 검증된 프레임웍을 사용하게 되겠지요. 프로젝트관리를 해야한다면 소프트웨어 개발 방법론도 알아둘 필요가 있습니다.


 
























출시된 제품의 성능이 문제가 되어 튜닝을 해야한다면 IO쪽과 DB쪽에 대한 지식이 필요합니다.

 

   

 

 

















PS) 한빛미디어에서 이클립스의 활요에 대한 책은 요새 많이 나왔는데 기본 사용법에 관련된 책은 찾기 힘드네요. 스프링 최신버전에 대한 책도 나와주었으면 좋겠습니다.

Posted by 지니랜드 | 2009/03/18 00:58 | 자바 | 트랙백 | 덧글(3)
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년 02월 26일 Posted title : 제 10회 한국 자바 개발자 컨퍼런스

 

 

신청 강의 목록

Session 1 : Kestrel 105 - Method Chain & Ajax Application
Session 2 : Mustang 102 - Seam 에서 WebBeans가 되기까지
Session 3 : Tiger 103 - 차세대 배치 시스템 구축 성공 전략
Session 4 : Merlin 104 - Practical MapReduce

 

제 10회 한국자바개발자 컨퍼런스

Posted by 지니랜드 | 2009/02/26 18:38 | 자바 | 트랙백 | 덧글(2)
2009년 01월 27일 Posted title : [영어] cut the cord

 

The Java 1.4 family will reach its End of Service Life (EOSL) this year, in October 2008. 
Similarly, Sun announced in April that the EOSL for Java 5.x will be in October of 2009.

If you are still using a Java 1.4x version, it might be time to cut the cord

jdk1.4 에 대한 서비스 라이센스가 2008년 10월 종료되었고, jdk1.5 에 대한 라이센스가 2009년 10월에 종료된다고 했으니 여러분이 jdk1.4버전을 쓰고 있다면 이제 독립을 해야할 시간이 되었다.

 

 

누군가의 보살핌이나 지원에서 벗어나 독립하라고 할 때에는 'cut the cord'라는 표현을 쓴다. 여기서 말하는 cord는 전기선이 아니라 아이가 태어날 때 엄마와 연결되어 있는 탯줄을 의미한다. 따라서 '탯줄을 끊고 독립하다'는 의미를 가지고 있다. (from http://e4u.ybmsisa.com/EngPlaza/hotWord.asp?idx=1514)

Posted by 지니랜드 | 2009/01/27 00:33 | 영어 | 트랙백
2009년 01월 26일 Posted title : [JavaFX] translateX, translateY

http://weblogs.java.net/blog/aim/archive/2009/01/layout_primer_f.html

 

상위 노드를 기준으로 상대적으로 원점을 translateX, translateY만큼 이동

 

 

Example 1: Let's look further at these bounds variables using a concrete code example which creates a rectangle.
rectangle1.png
Note that x and y are variables specific to javafx.scene.shape.Rectangle and that they position the rectangle within its own coordinate space rather than moving the entire coordinate space of the node. I throw this out as the first example because it is often the first thing that trips up developers coming from traditional toolkits such as Swing, where changing x,y effectively performs a translation of the component's coordinate space. All of the javafx.scene.shape classes have variables for specifying appropriate shape geometry within their local coordinate space (e.g. Rectangle has x, y, width, height, Circle has centerX, centerY, radius, etc) and such position variables should not be confused with a translation on the coordinate space, as we'll look at in our next example.


Example 2: To translate the rectangle along with its coordinate space (rather than move the rectangle within it), we instead set translateX/translateY, which are variables on Node.
rectangle2.png
Now boundsInParent has changed to reflect the translated rectangle, however boundsInLocal and layoutBounds remain unchanged because they are relative to the rectangle's coordinate space, which was what was shifted.

inside design note: we debated endlessly on whether to rename translateX,translateY to "x","y" (as it's less typing and more familiar to traditional toolkit programming), however we decided that "translate" was more descriptive in the 2D sense and keeping it avoided renaming the x,y position variables in some shape classes.

Posted by 지니랜드 | 2009/01/26 21:12 | 자바 | 트랙백
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월 13일 Posted title : [JavaScript] 개체 지향 기술을 이용한 고급 웹 응용 프로그램 만들기

JavaScript 언어에서 어떻게 개체 지향 프로그래밍을 지원하는지 자세히 살펴보고 이러한 지원을 사용하여 JavaScript에서 효과적으로 개체 지향 개발을 수행하는 방법

http://msdn.microsoft.com/ko-kr/magazine/cc163419.aspx

prototype.js 분석 전 알아두어야 할 자바스크립트 특징
http://blog.naver.com/st1503/10021315233

Posted by 지니짱 | 2009/01/13 14:08 | 웹기술 HTML javascript | 트랙백
2009년 01월 08일 Posted title : [sql client] 코드생성,

Location:
http://www.thinkui.com/sqlclient/index.html
ThinkUI Software Inc. is pleased to announce the availability of ThinkUI SQL Client 1.0.9.
(ThinkUI SQL Client 1.0.9 버전이 출시되었다.)
The ThinkUI SQL Client is a graphical program that allows Java developers to browse a database structure, edit data in the tables, issue SQL queries
, and generate code (e.g. Java Bean, DAO, SQL queries, JSP files, etc.) based on customizable Velocity templates.
(ThinkUI SQL Client 는 자바개발자들에게 데이타 구조를 살펴보고, 테이블안의 데이타를 수정하고 , SQL 쿼리를 생성하고,
Velocity 템플릿기반의 코드(Java Bean, DAO, SQL queries, JSP files, etc)를 생성할 수 있게 해주는 그래픽UI를 가지고 있는 프로그램이다.)


설치:

thinkui_sqlclient-1.0.9.zip 의 압축을 풀고
thinkui_sqlclient.bat 파일을 실행시키면 됩니다.
(주의: 오라클 사용시 thinkui_sqlclient.bat 에서 오라클 드라이버이름을 lib경로에 있는 ojdbc14-9.2.0.8.jar로 바꾸어 주세요. 
set _ORACLE_JAR=lib\ojdbc14-9.2.0.8.jar)

 

라이센스신청

라이센스가 필요하므로
http://www.thinkui.com/ 에서 라이센스를 신청하시면 됩니다.

 

데모
http://www.thinkui.com/tutorials/intro_derby.html

 

스크린샷

 

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

자바 헛 배웠군 -_-

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

 

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

 

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

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

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


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

Posted by 지니짱 | 2009/01/07 09:45 | 자바 | 트랙백
◀ 이전 페이지 다음 페이지 ▶



지니랜드
by 지니랜드
카테고리
전체
프로그래밍
자바
- 이클립스
- 기타언어 (ruby, php)
웹기술 HTML javascript
컴퓨터
- Unix/Linux
- spring
- 테스팅
툴 프로그램 설치
- 버전관리
영어
동영상
영화 책
일상
여행
아무거나
재테크
펀드
미분류
이글루링크
소스코드위를 걷다.....
life logging
거북거북 월드 (ㅡ.-..
아직 열지 않은 선물
All about IT Trends
까먹지말자!
이규영 연예영화 블로그
ok_code 블러그
최근 등록된 덧글
카테고리별로 해당되는 ..
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
좋은지적 감사드립니다.
by 지니짱 at 09/24
멋진데요? 잘보겠습니다.
by coffeejava at 08/04
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, 해상왕 장보고

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

태그
Migration 10회JCO컨퍼런스후기 xDBA cut space 이벤트 한빛미디어 underscore JCO 디자인패턴 유틸 javafx java translateY db 제10회한국자바개발자컨퍼런스 트위터 JCO10THCONFERENCE 에도가와란포 translateX 추리소설 commandpattern 파일다운로드 로드맵 1.0 커맨드패턴 영진출판사 할인 자바 dodreams
rss

skin by 에셈