Posted title : 태그 : 자바
2009/03/18   한빛 미디어 도서를 이용한 Java Roadmap [3]
2009/02/28   10회 JCO 컨퍼런스 후기 [4]
2009/01/18   [javaFX] 웹서비스 flickr이미지 검색 어플리케이션
2008/11/13   [PMD] eclipse PMD 플러그인
Posted
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년 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 | 자바 | 트랙백
2008년 11월 13일 Posted title : [PMD] eclipse PMD 플러그인

eclipse plugin 설치

To install the PMD plugin for Eclipse:

  • Start Eclipse and open a project
  • Select "Help"->"Software Updates"->"Find and Install"
  • Click "Next", then click "New remote site"
  • Enter "PMD" into the Name field and "http://pmd.sf.net/eclipse" into the URL field
  • Click through the rest of the dialog boxes to install the plugin

Package Explorer에서 프로젝트 선택후 마우스 우클릭 PMD -> Check Code with PMD 실행



Violance Overview(우측하단그림)에 소스파일에 대해 체크한 내용들이 출력된다.
그중 하나를 선택(TooFewBranchesForSwitch..) 를 클릭하면
Violance OutLine에 (좌측하단그림)에 그 에러에 대해 하이라이팅되면서 설명을 볼 수 있다.
TooFewBranchesForSwitch에 대한 에러설명은 A switch with less than 3 branches is inefficient, use a if statement instead.
라고 출력된다.

Violance OutLine

에서 마우스 우측버튼을 누르면 Show Detail 항목으로 자세한 에러의 자세한 내역을 알 수 있다.


Posted by 지니짱 | 2008/11/13 09:58 | - 이클립스 | 트랙백
◀ 이전 페이지 다음 페이지 ▶



지니랜드
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, 해상왕 장보고

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

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

skin by 에셈